Memeriksa objek tertentu terhadap serangkaian spesifikasi tertentu agar Anda tidak menulis pengujian boilerplate.
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
Sejak Node.js 16.x, ia menyertakan test runner bawaan.
Spok mendukung ini secara langsung sebagai berikut:
assert
bawaan untuk menegaskan nilait: TestContext
yang diteruskan untuk mencetak pesan diagnostik yang merinci pernyataan gilaLihat ./example/node-test.js dan ./example/node-test-nested.js untuk contoh selengkapnya.
spok mendeteksi apakah warna harus digunakan dalam output untuk menghindari kerusakan kompatibilitas TAP saat diperlukan sebagai berikut:
FORCE_COLOR
env var disetel ke 1|true
SELALUNO_COLOR
env var disetel ke 1|true
TIDAK PERNAH digunakannode --test mytest.js
dan FORCE_COLOR
tidak disetel maka warna dinonaktifkannode mytest.js
dan NO_COLOR
tidak disetel, maka warna diaktifkan t
yang mencerminkan modul assert
dan juga mencetak hasil dan pesan diagnostik ke konsol, sehingga spok menggunakan t
untuk melakukan pernyataanLihat ./example/tape.js dan ./example/tape-nested.js untuk contoh selengkapnya.
Spok dapat langsung digunakan dengan expect
, misalnya saat menjalankan pengujian dengan cypress.io.
Cukup buat fungsi penegasan khusus dan teruskan ke spok. Perbedaan utama dalam menjalankan pengujian dengan tape
adalah jika satu properti pada objek yang dibandingkan tidak cocok, pengujian akan langsung gagal.
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
saja? deepEqual
berfungsi dengan baik untuk sebagian besar kasus, tetapi dalam beberapa kasus Anda memerlukan lebih banyak kontrol, yaitu
Secara default spok mencetak spesifikasi yang memenuhi pernyataan tertentu, yaitu satisfies: spok.range(2, 4)
. Anda dapat mematikannya melalui spok.printSpec = false
.
Di sisi lain, jika Anda ingin detail lebih lanjut tentang spesifikasi yang terpenuhi, lakukan spok.printDescription = true
untuk membuat spok mencetak hal-hal seperti satisfies: spok.range(2, 4) 2 <= value <= 4
.
Spesifikasi dan deskripsi dicetak dalam warna abu-abu sehingga Anda dapat fokus pada nilai sebenarnya dari hasil pengujian.
Daftar Isi dibuat dengan DocToc
spok menyediakan beberapa fungsi spesifikasi umum. Namun Anda juga dapat menulis fungsi Anda sendiri, kembalikan true
jika spesifikasi terpenuhi dan false
jika tidak (lihat contoh di atas).
Jika Anda menulis fungsi spesifikasi yang berguna bagi orang lain, harap tambahkan bersama dengan tes dan berikan PR.
spok.*
nama fungsi perbandingan berasal dari operator perbandingan bash agar lebih mudah diingat.
Memeriksa spesifikasi yang diberikan terhadap objek.
Saat pengujian dijalankan, nilai sebenarnya dicetak untuk diverifikasi secara visual sementara setiap spesifikasi yang disediakan divalidasi dan kegagalan pengujian terjadi jika salah satu dari spesifikasi tersebut gagal.
Parameter
t
Objek yang memiliki fungsi pernyataan equal
dan deepEqual
(untuk membandingkan objek) - gunakan tap , tape , menegaskan , Node.js TestContext atau perpustakaan lain yang memilikinya sehingga kompatibelobj
Objek objek untuk memverifikasi spesifikasi terhadapspecifications
Keberatan spesifikasi untuk diverifikasi Versi spok
yang kurang ketat mengenai hubungan tipe spesifikasi, yaitu memungkinkan penggantian tipe secara manual atau menurunkannya dari parameter yang disediakan.
Gunakan HANYA ketika Anda tidak dapat menyesuaikan jenisnya, jadi spok
biasa bisa digunakan.
Menentukan bahwa angka yang diberikan berada dalam rentang yang diberikan, yaitu min<= x <=max
.
var spec = {
x : spok . range ( 1 , 2 ) // specifies that x should be >=1 and <=2
}
Parameter
min
Jumlah minimummax
Jumlah maksimumMenentukan bahwa suatu angka lebih besar dari kriteria yang diberikan.
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
Parameter
n
Kriteria angkaMenentukan bahwa suatu angka lebih besar atau sama dengan kriteria yang diberikan.
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
Parameter
n
Kriteria angkaMenentukan bahwa suatu angka kurang dari kriteria yang diberikan.
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
Parameter
n
Kriteria angkaMenentukan bahwa suatu angka kurang atau sama dengan kriteria yang diberikan.
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
Parameter
n
Kriteria angkaMenentukan bahwa nilainya tidak sama dengan nilai lainnya.
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
Parameter
value
Kriteria apa punMenentukan bahwa nilainya lebih besar dari nol
var spec = {
x : spok . gtz
}
Menentukan bahwa nilainya lebih besar atau sama dengan nol
var spec = {
x : spok . gez
}
Menentukan bahwa nilainya kurang dari nol
var spec = {
x : spok . ltz
}
Menentukan bahwa nilainya kurang atau sama dengan nol
var spec = {
x : spok . lez
}
Menentukan bahwa input adalah tipe tertentu.
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
Parameter
t
String tipe yang diharapkanMenentukan bahwa inputnya adalah array.
var spec = {
x : spok . array // specifies that x should be an Array
}
Menentukan bahwa input adalah array dengan jumlah elemen tertentu
var spec = { x: spok.arrayElements(2) // menetapkan bahwa x harus berupa Array dengan 2 elemen }
Parameter
n
Jumlah jumlah elemenMenentukan bahwa inputnya adalah array dengan sejumlah elemen dalam rentang tertentu
var spec = { x: spok.arrayElementsRange(2, 4) // menetapkan bahwa x harus berupa Array dengan 2-4 elemen }
Parameter
min
Jumlah min jumlah elemenmax
Jumlah max jumlah elemen Menentukan bahwa input tipe number dan isNaN(x)
mengembalikan false
.
var spec = {
x : spok . number // specifies that x should be a Number
}
Menentukan bahwa inputnya adalah string.
var spec = {
x: spok.string // specifies that x should be a String
}
Menentukan bahwa input adalah suatu fungsi.
var spec = {
x: spok.function // specifies that x should be a function
}
Menentukan bahwa inputnya adalah objek dan bukan null
.
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
Menentukan bahwa string dimulai dengan substring yang ditentukan.
CATATAN : hanya tersedia dengan node.js yang memiliki fungsi ES6 startsWith
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parameter
what
yang harus memulai substring dari string yang diberikanMenentukan bahwa string diakhiri dengan substring yang ditentukan.
CATATAN : hanya tersedia dengan node.js yang memiliki fungsi ES6 endsWith
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
Parameter
what
yang harus memulai substring dari string yang diberikanMenentukan bahwa string harus cocok dengan ekspresi reguler yang diberikan.
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
Parameter
regex
Ekspresi reguler RegExp yang digunakan untuk memeriksa string melalui test
Menentukan bahwa suatu nilai didefinisikan, yaitu nilai tersebut bukan null
atau undefined
.
var spec = {
x : spok . defined
}
Menentukan bahwa suatu nilai adalah notDefined, yaitu null
atau notDefined
.
var spec = {
x : spok . notDefined
}
MIT