Verifica um determinado objeto em relação a um determinado conjunto de especificações para evitar que você escreva testes padronizados.
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
Desde o Node.js 16.x, ele inclui um executor de testes integrado.
Spok oferece suporte imediato para isso:
assert
integrado para afirmar os valorest: TestContext
passado para imprimir mensagens de diagnóstico que detalham as afirmações feitasConsulte ./example/node-test.js e ./example/node-test-nested.js para obter exemplos completos.
spok detecta se cores devem ser usadas na saída para evitar quebrar a compatibilidade do TAP quando necessário, como segue:
FORCE_COLOR
env var estiver definido como 1|true
são SEMPRENO_COLOR
env var estiver definido como 1|true
NUNCA são usadasnode --test mytest.js
e FORCE_COLOR
não estiver definido, então o colorse será desabilitadonode mytest.js
e NO_COLOR
não estiver definido, as cores serão habilitadas t
que espelha o módulo assert
e também imprime resultados e a mensagem de diagnóstico no console, assim spok usa t
para realizar asserçõesConsulte ./example/tape.js e ./example/tape-nested.js para obter exemplos completos.
Spok pode ser usado imediatamente com expect
, por exemplo, ao executar testes com cypress.io.
Simplesmente crie uma função assert personalizada e passe-a para o spok. A principal diferença na execução de testes com tape
é que se uma única propriedade no objeto comparado não corresponder, o teste falhará imediatamente.
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
funciona muito bem na maioria dos casos, mas em alguns casos você precisa de mais controle, ou seja
Por padrão, spok imprime a especificação que uma afirmação específica satisfez, ou seja, satisfies: spok.range(2, 4)
. Você pode desligar isso via spok.printSpec = false
.
Por outro lado, se você quiser mais detalhes sobre a especificação satisfeita, faça spok.printDescription = true
em vez de fazer com que o spok imprima coisas como satisfies: spok.range(2, 4) 2 <= value <= 4
.
As especificações e descrições são impressas em cinza para que você possa se concentrar nos valores reais do resultado do teste.
Índice gerado com DocToc
spok fornece algumas funções de especificação comuns. No entanto, você também pode escrever suas próprias funções, apenas retorne true
se a especificação for satisfeita e false
se não (veja o exemplo acima).
Se você escrever uma função de especificação que seja útil para outras pessoas, adicione-a junto com um teste e forneça um PR.
Os nomes das funções de comparação spok.*
são derivados de operadores de comparação bash para torná-los mais fáceis de lembrar.
Verifica as especificações fornecidas em relação ao objeto.
Quando os testes são executados, os valores reais são impressos para verificação visual enquanto cada especificação fornecida é validada e uma falha no teste é causada se uma delas falhar.
Parâmetros
t
Objeto que possui funções de asserção equal
e deepEqual
(para comparar objetos) - use tap , tape , assert , Node.js TestContext ou qualquer outra biblioteca que os possua e, portanto, seja compatívelobj
Object o objeto para verificar as especificaçõesspecifications
Objecte as especificações para verificar Versão do spok
que é menos rigorosa quanto à relação do tipo de especificação, nomeadamente permite sobrescrever o tipo manualmente ou derivá-lo do parâmetro fornecido.
Use SOMENTE quando você não puder ajustar os tipos, para que spok
simples funcione.
Especifica que o número fornecido está dentro do intervalo especificado, ou seja, min<= x <=max
.
var spec = {
x : spok . range ( 1 , 2 ) // specifies that x should be >=1 and <=2
}
Parâmetros
min
Número mínimomax
Número máximoEspecifica que um número é maior que os critérios fornecidos.
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
Parâmetros
n
Critérios numéricosEspecifica que um número é maior ou igual aos critérios fornecidos.
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
Parâmetros
n
Critérios numéricosEspecifica que um número é menor que os critérios fornecidos.
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
Parâmetros
n
Critérios numéricosEspecifica que um número é menor ou igual aos critérios fornecidos.
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
Parâmetros
n
Critérios numéricosEspecifica que o valor não é igual a outro.
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
Parâmetros
value
Qualquer critérioEspecifica que o valor é maior que zero
var spec = {
x : spok . gtz
}
Especifica que o valor é maior ou igual a zero
var spec = {
x : spok . gez
}
Especifica que o valor é menor que zero
var spec = {
x : spok . ltz
}
Especifica que o valor é menor ou igual a zero
var spec = {
x : spok . lez
}
Especifica que a entrada é de um determinado tipo.
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
Parâmetros
t
String tipo esperadoEspecifica que a entrada é uma matriz.
var spec = {
x : spok . array // specifies that x should be an Array
}
Especifica que a entrada é uma matriz com um número específico de elementos
var spec = { x: spok.arrayElements(2) // especifica que x deve ser um Array com 2 elementos }
Parâmetros
n
Número número de elementosEspecifica que a entrada é uma matriz com vários elementos em um determinado intervalo
var spec = { x: spok.arrayElementsRange(2, 4) // especifica que x deve ser um Array com 2-4 elementos }
Parâmetros
min
Número mínimo de elementosmax
número máximo de elementos Especifica que a entrada do tipo number e isNaN(x)
retorna false
.
var spec = {
x : spok . number // specifies that x should be a Number
}
Especifica que a entrada é uma sequência.
var spec = {
x: spok.string // specifies that x should be a String
}
Especifica que a entrada é uma função.
var spec = {
x: spok.function // specifies that x should be a function
}
Especifica que a entrada é um objeto e não é null
.
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
Especifica que a sequência começa com a subsequência especificada.
NOTA : disponível apenas com node.js que possui uma função ES6 startsWith
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parâmetros
what
substring de string a string fornecida deve começarEspecifica que a sequência termina com a subsequência especificada.
NOTA : disponível apenas com node.js que possui uma função ES6 endsWith
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parâmetros
what
substring de string a string fornecida deve começarEspecifica que a string precisa corresponder à expressão regular fornecida.
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
Parâmetros
regex
Expressão regular RegExp em relação à qual a string é verificada por meio de test
Especifica que um valor está definido, ou seja, não é null
nem undefined
.
var spec = {
x : spok . defined
}
Especifica que um valor é notDefined, ou seja, é null
ou notDefined
.
var spec = {
x : spok . notDefined
}
MIT