Vérifie un objet donné par rapport à un ensemble donné de spécifications pour vous empêcher d'écrire des tests passe-partout.
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
Depuis Node.js 16.x, il inclut un exécuteur de test intégré.
Spok prend en charge cela dès le départ comme suit :
assert
intégré pour affirmer les valeurst: TestContext
passé pour imprimer des messages de diagnostic qui détaillent les assertions follesVoir ./example/node-test.js et ./example/node-test-nested.js pour des exemples complets.
spok détecte si les couleurs doivent être utilisées dans la sortie afin d'éviter de rompre la compatibilité TAP en cas de besoin, comme suit :
FORCE_COLOR
env var est défini sur 1|true
couleurs sont TOUJOURSNO_COLOR
env var est défini sur 1|true
couleurs ne sont JAMAIS utiliséesnode --test mytest.js
et que FORCE_COLOR
n'est pas défini, les couleurs sont désactivéesnode mytest.js
et que NO_COLOR
n'est pas défini, les couleurs sont activées t
qui reflète le module assert
et imprime également les résultats et le message de diagnostic sur la console, ainsi spok utilise t
pour effectuer des assertionsVoir ./example/tape.js et ./example/tape-nested.js pour des exemples complets.
Spok peut être utilisé immédiatement avec expect
, par exemple lors de l'exécution de tests avec cypress.io.
Créez simplement une fonction d'assertion personnalisée et transmettez-la à Spok. La principale différence avec l'exécution de tests avec tape
est que si une seule propriété de l'objet comparé ne correspond pas, le test échoue immédiatement.
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
fonctionne très bien dans la plupart des cas, mais dans certains cas, vous avez besoin de plus de contrôle, par exemple
Par défaut, spok imprime la spécification selon laquelle une assertion particulière satisfait, c'est- satisfies: spok.range(2, 4)
. Vous pouvez désactiver cela via spok.printSpec = false
.
D'un autre côté, si vous voulez plus de détails sur la spécification satisfaite, faites plutôt spok.printDescription = true
pour que spok imprime des éléments comme satisfies: spok.range(2, 4) 2 <= value <= 4
.
Les spécifications et les descriptions sont imprimées en gris afin que vous puissiez vous concentrer sur les valeurs réelles du résultat du test.
Table des matières générée avec DocToc
Spok fournit quelques fonctions de spécification courantes. Cependant, vous pouvez également écrire vos propres fonctions, retournez simplement true
si la spécification a été satisfaite et false
sinon (voir l'exemple ci-dessus).
Si vous écrivez une fonction de spécification qui serait utile à d'autres, veuillez l'ajouter avec un test et fournir un PR.
Les noms des fonctions de comparaison spok.*
sont dérivés des opérateurs de comparaison bash pour les rendre plus faciles à mémoriser.
Vérifie les spécifications données par rapport à l'objet.
Lorsque les tests sont exécutés, les valeurs réelles sont imprimées pour vérifier visuellement pendant que chaque spécification fournie est validée et qu'un échec de test est provoqué si l'une d'entre elles échoue.
Paramètres
t
Objet qui a des fonctions d'assertion equal
et deepEqual
(pour comparer des objets) - utilisez tap , tape , assert , Node.js TestContext ou toute autre bibliothèque qui en possède et est donc compatibleobj
Objecter l'objet pour vérifier les spécifications par rapportspecifications
Objecter les spécifications pour vérifier Version de spok
qui est moins stricte sur la relation entre le type de spécification, à savoir qu'elle permet de remplacer le type manuellement ou de le dériver du paramètre fourni.
À utiliser UNIQUEMENT lorsque vous ne pouvez pas ajuster les types, donc spok
simples fonctionnent.
Spécifie que le nombre donné se trouve dans la plage donnée, c'est-à-dire min<= x <=max
.
var spec = {
x : spok . range ( 1 , 2 ) // specifies that x should be >=1 and <=2
}
Paramètres
min
Nombre minimummax
Spécifie qu'un nombre est supérieur aux critères donnés.
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
Paramètres
n
Critère numériqueSpécifie qu'un nombre est supérieur ou égal aux critères donnés.
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
Paramètres
n
Critère numériqueSpécifie qu'un nombre est inférieur aux critères donnés.
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
Paramètres
n
Critère numériqueSpécifie qu'un nombre est inférieur ou égal aux critères donnés.
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
Paramètres
n
Critère numériqueSpécifie que la valeur n'est pas égale à une autre.
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
Paramètres
value
Tous critèresSpécifie que la valeur est supérieure à zéro
var spec = {
x : spok . gtz
}
Spécifie que la valeur est supérieure ou égale à zéro
var spec = {
x : spok . gez
}
Spécifie que la valeur est inférieure à zéro
var spec = {
x : spok . ltz
}
Spécifie que la valeur est inférieure ou égale à zéro
var spec = {
x : spok . lez
}
Spécifie que l'entrée est d'un type donné.
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
Paramètres
t
Type de chaîne attenduSpécifie que l'entrée est un tableau.
var spec = {
x : spok . array // specifies that x should be an Array
}
Spécifie que l'entrée est un tableau avec un nombre spécifique d'éléments
var spec = { x: spok.arrayElements(2) // spécifie que x doit être un tableau avec 2 éléments }
Paramètres
n
Nombre nombre d'élémentsSpécifie que l'entrée est un tableau avec un certain nombre d'éléments dans une plage donnée
var spec = { x: spok.arrayElementsRange(2, 4) // spécifie que x doit être un tableau avec 2 à 4 éléments }
Paramètres
min
nombre min d'élémentsmax
Nombre maximum d'éléments Spécifie que l'entrée de type number et isNaN(x)
renvoie false
.
var spec = {
x : spok . number // specifies that x should be a Number
}
Spécifie que l'entrée est une chaîne.
var spec = {
x: spok.string // specifies that x should be a String
}
Spécifie que l'entrée est une fonction.
var spec = {
x: spok.function // specifies that x should be a function
}
Spécifie que l'entrée est un objet et qu'elle n'est pas null
.
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
Spécifie que la chaîne commence par la sous-chaîne spécifiée.
REMARQUE : uniquement disponible avec node.js qui possède une fonction ES6 startsWith
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Paramètres
what
sous- chaîne la chaîne donnée doit commencerSpécifie que la chaîne se termine par la sous-chaîne spécifiée.
REMARQUE : uniquement disponible avec node.js qui possède une fonction ES6 endsWith
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Paramètres
what
sous- chaîne la chaîne donnée doit commencerSpécifie que la chaîne doit correspondre à l'expression régulière donnée.
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
Paramètres
regex
Expression régulière RegExp par rapport à laquelle la chaîne est vérifiée via test
Spécifie qu'une valeur est définie, c'est-à-dire qu'elle n'est ni null
ni undefined
.
var spec = {
x : spok . defined
}
Spécifie qu'une valeur est notDefined, c'est-à-dire qu'elle est null
ou notDefined
.
var spec = {
x : spok . notDefined
}
MIT