Comprueba un objeto determinado con un conjunto determinado de especificaciones para evitar que escriba pruebas repetitivas.
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 Node.js 16.x incluye un ejecutor de pruebas integrado.
Spok admite esto desde el primer momento de la siguiente manera:
assert
incorporado para afirmar los valores.t: TestContext
pasado para imprimir mensajes de diagnóstico que detallan las afirmaciones locasConsulte ./example/node-test.js y ./example/node-test-nested.js para ver ejemplos completos.
spok detecta si se deben usar colores en la salida para evitar romper la compatibilidad con TAP cuando sea necesario de la siguiente manera:
FORCE_COLOR
env var se establece en 1|true
SIEMPRE sonNO_COLOR
env var se establece en 1|true
NUNCA se usannode --test mytest.js
y FORCE_COLOR
no está configurado, entonces los colores están deshabilitadosnode mytest.js
y NO_COLOR
no está configurado, entonces los colores están habilitados t
que refleja el módulo assert
y también imprime los resultados y el mensaje de diagnóstico en la consola, por lo que spok usa t
para realizar afirmacionesConsulte ./example/tape.js y ./example/tape-nested.js para ver ejemplos completos.
Spok se puede utilizar de forma inmediata con expect
, por ejemplo, al ejecutar pruebas con cypress.io.
Simplemente cree una función de afirmación personalizada y pásela a spok. La principal diferencia con la ejecución de pruebas con tape
es que si una sola propiedad en el objeto comparado no coincide, la prueba falla inmediatamente.
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 muy bien en la mayoría de los casos, pero en algunos casos necesitas más control, es decir
Por defecto, spok imprime la especificación que satisface una afirmación particular, es decir, satisfies: spok.range(2, 4)
. Puede desactivarlo mediante spok.printSpec = false
.
Por otro lado, si desea obtener más detalles sobre la especificación satisfecha, haga spok.printDescription = true
en su lugar para que spok imprima cosas como satisfies: spok.range(2, 4) 2 <= value <= 4
.
Las especificaciones y descripciones están impresas en gris para que pueda centrarse en los valores reales del resultado de la prueba.
Tabla de contenidos generada con DocToc
Spok proporciona algunas funciones de especificación comunes. Sin embargo, también puede escribir sus propias funciones, simplemente devuelva true
si se cumplió la especificación y false
en caso contrario (consulte el ejemplo anterior).
Si escribe una función de especificación que sería útil para otros, agréguela junto con una prueba y proporcione un PR.
Los nombres de las funciones de comparación spok.*
se derivan de los operadores de comparación de bash para que sean más fáciles de recordar.
Comprueba las especificaciones dadas con el objeto.
Cuando se ejecutan las pruebas, los valores reales se imprimen para verificarlos visualmente mientras se valida cada especificación proporcionada y se produce una falla de prueba si una de ellas falla.
Parámetros
t
Objeto que tiene funciones de aserción equal
y deepEqual
(para comparar objetos): use tap , tape , afirmar , Node.js TestContext o cualquier otra biblioteca que las tenga y, por lo tanto, sea compatible.obj
Objeto el objeto para verificar las especificaciones contraspecifications
Objetar las especificaciones a verificar Versión de spok
que es menos estricta en cuanto a la relación del tipo de especificación, es decir, permite anular el tipo manualmente o lo deriva del parámetro proporcionado.
Úselo SÓLO cuando no pueda ajustar los tipos, por lo que spok
simple funciona.
Especifica que el número dado está dentro del rango dado, es decir 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
máximoEspecifica que un número es mayor que los criterios dados.
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
Parámetros
n
Criterios numéricosEspecifica que un número es mayor o igual al criterio dado.
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
Parámetros
n
Criterios numéricosEspecifica que un número es menor que los criterios dados.
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
Parámetros
n
Criterios numéricosEspecifica que un número es menor o igual al criterio dado.
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
Parámetros
n
Criterios numéricosEspecifica que el valor no es igual a otro.
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
Parámetros
value
Cualquier criterioEspecifica que el valor es mayor que cero.
var spec = {
x : spok . gtz
}
Especifica que el valor es mayor o igual a cero.
var spec = {
x : spok . gez
}
Especifica que el valor es menor que cero.
var spec = {
x : spok . ltz
}
Especifica que el valor es menor o igual a cero.
var spec = {
x : spok . lez
}
Especifica que la entrada es de un tipo determinado.
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
Parámetros
t
Tipo esperado de cadenaEspecifica que la entrada es una matriz.
var spec = {
x : spok . array // specifies that x should be an Array
}
Especifica que la entrada es una matriz con un número específico de elementos.
var spec = { x: spok.arrayElements(2) // especifica que x debe ser una matriz con 2 elementos }
Parámetros
n
Número número de elementosEspecifica que la entrada es una matriz con una cantidad de elementos en un rango determinado
var spec = { x: spok.arrayElementsRange(2, 4) // especifica que x debe ser una matriz con 2-4 elementos }
Parámetros
min
Número mínimo de elementosmax
Número máximo de elementos. Especifica que la entrada de tipo número y isNaN(x)
devuelve false
.
var spec = {
x : spok . number // specifies that x should be a Number
}
Especifica que la entrada es una cadena.
var spec = {
x: spok.string // specifies that x should be a String
}
Especifica que la entrada es una función.
var spec = {
x: spok.function // specifies that x should be a function
}
Especifica que la entrada es un objeto y no es null
.
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
Especifica que la cadena comienza con la subcadena especificada.
NOTA : solo disponible con node.js que tiene una función ES6 startsWith
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parámetros
what
subcadena de cadena debe comenzar la cadena dadaEspecifica que la cadena termina con la subcadena especificada.
NOTA : solo disponible con node.js que tiene una función ES6 endsWith
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parámetros
what
subcadena de cadena debe comenzar la cadena dadaEspecifica que la cadena debe coincidir con la expresión regular dada.
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
Parámetros
regex
expresión regular RegExp contra la cual se verifica la cadena mediante test
Especifica que un valor está definido, es decir, no es ni null
ni undefined
.
var spec = {
x : spok . defined
}
Especifica que un valor no está definido, es decir, es null
o notDefined
.
var spec = {
x : spok . notDefined
}
MIT