Überprüft ein bestimmtes Objekt anhand eines bestimmten Satzes von Spezifikationen, um zu verhindern, dass Sie Mustertests schreiben.
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
Seit Node.js 16.x enthält es einen integrierten Testläufer.
Spok unterstützt dies standardmäßig wie folgt:
assert
-Modul, um die Werte zu bestätigent: TestContext
, um Diagnosemeldungen zu drucken, die die Behauptungen detailliert beschreibenVollständige Beispiele finden Sie unter ./example/node-test.js und ./example/node-test-nested.js.
spok erkennt wie folgt, ob Farben in der Ausgabe verwendet werden sollen, um bei Bedarf eine Unterbrechung der TAP-Kompatibilität zu vermeiden:
FORCE_COLOR
env var auf 1|true
Farben IMMERNO_COLOR
env var auf 1|true
Farben verwendetnode --test mytest.js
ausgeführt werden und FORCE_COLOR
nicht festgelegt ist, sind die Farben deaktiviertnode mytest.js
ausgeführt werden und NO_COLOR
nicht festgelegt ist, sind Farben aktiviert t
bereit, das das assert
-Modul spiegelt und außerdem Ergebnisse und die Diagnosemeldung an die Konsole ausgibt. Daher verwendet Spok t
um Assertionen durchzuführenVollständige Beispiele finden Sie unter ./example/tape.js und ./example/tape-nested.js.
Spok kann sofort mit expect
verwendet werden, beispielsweise beim Ausführen von Tests mit cypress.io.
Erstellen Sie einfach eine benutzerdefinierte Assert-Funktion und übergeben Sie sie an Spok. Der Hauptunterschied zur Ausführung von Tests mit tape
besteht darin, dass der Test sofort fehlschlägt, wenn eine einzelne Eigenschaft im verglichenen Objekt nicht übereinstimmt.
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
funktioniert in den meisten Fällen hervorragend, aber in einigen Fällen benötigen Sie mehr Kontrolle, z
Standardmäßig gibt spok die Spezifikation aus, die eine bestimmte Behauptung erfüllt, d. satisfies: spok.range(2, 4)
. Sie können dies über spok.printSpec = false
deaktivieren.
Wenn Sie andererseits mehr Details über die erfüllte Spezifikation wünschen, geben Sie stattdessen spok.printDescription = true
ein, damit spok Dinge wie satisfies: spok.range(2, 4) 2 <= value <= 4
ausgibt.
Spezifikationen und Beschreibungen werden in Grau gedruckt, sodass Sie sich auf die tatsächlichen Werte der Testausgabe konzentrieren können.
Mit DocToc erstelltes Inhaltsverzeichnis
spok bietet einige allgemeine Spezifikationsfunktionen. Sie können jedoch auch Ihre eigenen Funktionen schreiben. Geben Sie einfach true
zurück, wenn die Spezifikation erfüllt wurde, und false
wenn nicht (siehe Beispiel oben).
Wenn Sie eine Spezifikationsfunktion schreiben, die für andere nützlich wäre, fügen Sie sie bitte zusammen mit einem Test hinzu und stellen Sie eine PR bereit.
Die Namen spok.*
-Vergleichsfunktionen werden von Bash- Vergleichsoperatoren abgeleitet, um sie leichter zu merken.
Prüft die angegebenen Spezifikationen anhand des Objekts.
Wenn die Tests ausgeführt werden, werden die tatsächlichen Werte ausgedruckt, um sie visuell zu überprüfen, während jede bereitgestellte Spezifikation validiert wird und ein Testfehler verursacht wird, wenn einer von ihnen fehlschlägt.
Parameter
t
Objekt mit den Assertionsfunktionen equal
und deepEqual
(zum Vergleichen von Objekten) – verwenden Sie tap , tape , Assertion , Node.js TestContext oder jede andere Bibliothek, die über diese verfügt und daher kompatibel istobj
Objekt ist das Objekt, anhand dessen die Spezifikationen überprüft werden sollenspecifications
Einspruch gegen die zu überprüfenden Spezifikationen einlegen Version von spok
, die hinsichtlich der Beziehung des Spezifikationstyps weniger streng ist, d. h. sie ermöglicht das manuelle Überschreiben des Typs oder leitet ihn vom bereitgestellten Parameter ab.
NUR verwenden, wenn Sie die Typen nicht anpassen können, sodass eine einfache spok
funktioniert.
Gibt an, dass die angegebene Zahl innerhalb des angegebenen Bereichs liegt, d. h. min<= x <=max
.
var spec = {
x : spok . range ( 1 , 2 ) // specifies that x should be >=1 and <=2
}
Parameter
min
Anzahl Minimummax
Anzahl maximalGibt an, dass eine Zahl größer als die angegebenen Kriterien ist.
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
Parameter
n
ZahlenkriterienGibt an, dass eine Zahl größer oder gleich den angegebenen Kriterien ist.
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
Parameter
n
ZahlenkriterienGibt an, dass eine Zahl kleiner als die angegebenen Kriterien ist.
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
Parameter
n
ZahlenkriterienGibt an, dass eine Zahl kleiner oder gleich den angegebenen Kriterien ist.
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
Parameter
n
ZahlenkriterienGibt an, dass der Wert nicht mit einem anderen übereinstimmt.
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
Parameter
value
Beliebiges KriteriumGibt an, dass der Wert größer als Null ist
var spec = {
x : spok . gtz
}
Gibt an, dass der Wert größer oder gleich Null ist
var spec = {
x : spok . gez
}
Gibt an, dass der Wert kleiner als Null ist
var spec = {
x : spok . ltz
}
Gibt an, dass der Wert kleiner oder gleich Null ist
var spec = {
x : spok . lez
}
Gibt an, dass die Eingabe von einem bestimmten Typ ist.
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
Parameter
t
String erwarteter TypGibt an, dass die Eingabe ein Array ist.
var spec = {
x : spok . array // specifies that x should be an Array
}
Gibt an, dass die Eingabe ein Array mit einer bestimmten Anzahl von Elementen ist
var spec = { x: spok.arrayElements(2) // gibt an, dass x ein Array mit 2 Elementen sein soll }
Parameter
n
Anzahl Anzahl der ElementeGibt an, dass die Eingabe ein Array mit einer Anzahl von Elementen in einem bestimmten Bereich ist
var spec = { x: spok.arrayElementsRange(2, 4) // gibt an, dass x ein Array mit 2-4 Elementen sein soll }
Parameter
min
Anzahl Min. Anzahl der Elementemax
Anzahl maximale Anzahl von Elementen Gibt an, dass die Eingabe vom Typ Zahl und isNaN(x)
false
zurückgibt.
var spec = {
x : spok . number // specifies that x should be a Number
}
Gibt an, dass die Eingabe eine Zeichenfolge ist.
var spec = {
x: spok.string // specifies that x should be a String
}
Gibt an, dass die Eingabe eine Funktion ist.
var spec = {
x: spok.function // specifies that x should be a function
}
Gibt an, dass die Eingabe ein Objekt ist und nicht null
ist.
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
Gibt an, dass die Zeichenfolge mit der angegebenen Teilzeichenfolge beginnt.
HINWEIS : Nur verfügbar mit node.js, das über eine ES6- startsWith
-Funktion verfügt
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parameter
what
String- Teilzeichenfolge die angegebene Zeichenfolge beginnen sollGibt an, dass die Zeichenfolge mit der angegebenen Teilzeichenfolge endet.
HINWEIS : Nur verfügbar mit node.js, das über eine ES6- endsWith
-Funktion verfügt
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parameter
what
String- Teilzeichenfolge die angegebene Zeichenfolge beginnen sollGibt an, dass die Zeichenfolge mit dem angegebenen regulären Ausdruck übereinstimmen muss.
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
Parameter
regex
RegExp regulärer Ausdruck, gegen den die Zeichenfolge per test
geprüft wird Gibt an, dass ein Wert definiert ist, also weder null
noch undefined
ist.
var spec = {
x : spok . defined
}
Gibt an, dass ein Wert notDefined ist, d. h. er ist entweder null
oder notDefined
.
var spec = {
x : spok . notDefined
}
MIT