Проверяет заданный объект на соответствие заданному набору спецификаций, чтобы избежать написания шаблонных тестов.
const test = require ( 'node:test' )
// or: const test = require('tape')
// or: const test = require('tap')
const spok = require ( 'spok' )
// this would be returned from a function you are testing
const object = {
one : 1
, two : 2
, three : 3
, four : 4
, helloWorld : 'hello world'
, anyNum : 999
, anotherNum : 888
, anArray : [ 1 , 2 ]
, anotherArray : [ 1 , 2 , 3 ]
, anObject : { }
}
// custom specification
function hasThreeElements ( a ) {
return a . length === 3
}
test ( 'my object meets the specifications' , ( t ) => {
spok ( t , object , {
$topic : 'spok-example'
, one : spok . ge ( 1 )
, two : 2
, three : spok . range ( 2 , 4 )
, four : spok . lt ( 5 )
, helloWorld : spok . startsWith ( 'hello' )
, anyNum : spok . type ( 'number' )
, anotherNum : spok . number
, anArray : spok . array
, anotherArray : hasThreeElements
, anObject : spok . ne ( undefined )
} )
} )
npm install spok
Начиная с Node.js 16.x, он включает встроенный инструмент запуска тестов.
Spok поддерживает это из коробки следующим образом:
assert
для подтверждения значенийt: TestContext
для печати диагностических сообщений, подробно описывающих утверждения.Полные примеры см. в ./example/node-test.js и ./example/node-test-nested.js.
spok определяет, следует ли использовать цвета в выводе, чтобы избежать нарушения совместимости TAP, когда это необходимо, следующим образом:
FORCE_COLOR
env var установлен в 1|true
цвета ВСЕГДАNO_COLOR
env var установлен в 1|true
цвета НИКОГДА не используютсяnode --test mytest.js
и FORCE_COLOR
не установлен, цвета отключаютсяnode mytest.js
и NO_COLOR
не установлен, цвета включены t
, который отражает модуль assert
, а также выводит результаты и диагностическое сообщение на консоль, таким образом, spok использует t
для выполнения утверждений.Полные примеры см. в ./example/tape.js и ./example/tape-nested.js.
Spok можно использовать «из коробки» с expect
, например, при запуске тестов с cypress.io.
Просто создайте собственную функцию утверждения и передайте ее в spok. Основное отличие от выполнения тестов с использованием tape
состоит в том, что если хотя бы одно свойство сравниваемого объекта не соответствует, тест немедленно завершается неудачей.
import spok from 'spok'
const t = spok . adapters . chaiExpect ( expect )
spok ( t , meta , {
err : null ,
fee : 5000 ,
status : {
Ok : null ,
} ,
} )
spok ( t , meta , {
err : null ,
fee : 4000 ,
status : {
Ok : null ,
} ,
} )
deepEqual
? deepEqual
отлично работает в большинстве случаев, но в некоторых случаях вам нужен больший контроль, т.е.
По умолчанию spok печатает спецификацию, которой соответствует конкретное утверждение, т.е. satisfies: spok.range(2, 4)
. Вы можете отключить это с помощью spok.printSpec = false
.
С другой стороны, если вам нужна более подробная информация о удовлетворяющей спецификации, вместо этого используйте spok.printDescription = true
, чтобы заставить spok печатать такие вещи, как satisfies: spok.range(2, 4) 2 <= value <= 4
.
Характеристики и описания напечатаны серым цветом, поэтому вы можете сосредоточиться на фактических значениях результатов теста.
Оглавление, созданное с помощью DocToc
spok предоставляет несколько общих функций спецификации. Однако вы также можете писать свои собственные функции, просто возвращайте true
если спецификация удовлетворена, и false
если нет (см. пример выше).
Если вы пишете спецификационную функцию, которая будет полезна другим, добавьте ее вместе с тестом и предоставьте PR.
Имена функций сравнения spok.*
получены из операторов сравнения bash , чтобы их было легче запомнить.
Сверяет заданные характеристики с объектом.
При запуске тестов фактические значения распечатываются для визуальной проверки, пока проверяется каждая предоставленная спецификация, и в случае сбоя одного из них возникает ошибка теста.
Параметры
t
Объект , который имеет функции утверждения equal
и deepEqual
(для сравнения объектов) — используйте Tap , Tape , Assert , Node.js TestContext или любую другую библиотеку, которая имеет такие функции и, следовательно, совместима.obj
Object объект для проверки спецификаций.specifications
Объект спецификации для проверки Версия spok
, которая менее строга в отношении типа спецификации, а именно позволяет переопределить тип вручную или получить его из предоставленного параметра.
Используйте ТОЛЬКО, когда вы не можете настроить типы, поэтому работает простая spok
.
Указывает, что данное число находится в заданном диапазоне, т. е. min<= x <=max
.
var spec = {
x : spok . range ( 1 , 2 ) // specifies that x should be >=1 and <=2
}
Параметры
min
Минимальное количествоmax
Максимальное количествоУказывает, что число превышает заданный критерий.
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
Параметры
n
Числовые критерииУказывает, что число больше или равно заданному критерию.
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
Параметры
n
Числовые критерииУказывает, что число меньше заданного критерия.
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
Параметры
n
Числовые критерииУказывает, что число меньше или равно заданному критерию.
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
Параметры
n
Числовые критерииУказывает, что значение не равно другому.
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
Параметры
value
Любой критерийУказывает, что значение больше нуля
var spec = {
x : spok . gtz
}
Указывает, что значение больше или равно нулю.
var spec = {
x : spok . gez
}
Указывает, что значение меньше нуля
var spec = {
x : spok . ltz
}
Указывает, что значение меньше или равно нулю.
var spec = {
x : spok . lez
}
Указывает, что входные данные имеют заданный тип.
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
Параметры
t
Ожидаемый тип строкиУказывает, что входные данные являются массивом.
var spec = {
x : spok . array // specifies that x should be an Array
}
Указывает, что входные данные представляют собой массив с определенным количеством элементов.
var spec = { x: spok.arrayElements(2) // указывает, что x должен быть массивом с двумя элементами }
Параметры
n
Число количество элементовУказывает, что входные данные представляют собой массив с количеством элементов в заданном диапазоне.
var spec = { x: spok.arrayElementsRange(2, 4) // указывает, что x должен быть массивом с 2–4 элементами }
Параметры
min
число мин. количество элементовmax
Number максимальное количество элементов Указывает, что ввод номера типа и isNaN(x)
возвращает false
.
var spec = {
x : spok . number // specifies that x should be a Number
}
Указывает, что входные данные являются строкой.
var spec = {
x: spok.string // specifies that x should be a String
}
Указывает, что входные данные являются функцией.
var spec = {
x: spok.function // specifies that x should be a function
}
Указывает, что входные данные являются объектом и не имеют значения null
.
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
Указывает, что строка начинается с указанной подстроки.
ПРИМЕЧАНИЕ . Доступно только с node.js, который имеет функцию ES6 startsWith
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Параметры
what
строковой подстроки должна начинаться данная строкаУказывает, что строка заканчивается указанной подстрокой.
ПРИМЕЧАНИЕ . Доступно только с node.js, который имеет функцию endsWith
ES6.
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Параметры
what
строковой подстроки должна начинаться данная строкаУказывает, что строка должна соответствовать данному регулярному выражению.
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
Параметры
regex
выражение, по которому строка проверяется с помощью test
Указывает, что значение определено, т. е. оно не является ни null
, ни undefined
.
var spec = {
x : spok . defined
}
Указывает, что значение имеет значение notDefined, т. е. оно либо равно null
, либо notDefined
.
var spec = {
x : spok . notDefined
}
Массачусетский технологический институт