特定のオブジェクトを特定の仕様セットと照合してチェックし、ボイラープレート テストを作成しないようにします。
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
Node.js 16.x 以降、組み込みのテスト ランナーが含まれています。
Spok は、次のようにすぐにこれをサポートします。
assert
モジュールを使用して値をアサートしますt: TestContext
使用して、アサーションの詳細を示す診断メッセージを出力します。完全な例については、./example/node-test.js および ./example/node-test-nested.js を参照してください。
spok は、必要に応じて TAP 互換性の破壊を避けるために出力で色を使用する必要があるかどうかを次のように検出します。
FORCE_COLOR
環境変数が1|true
色は常に表示されますNO_COLOR
環境変数が1|true
色は決して使用されませんnode --test mytest.js
経由で実行され、 FORCE_COLOR
が設定されていない場合、色は無効になりますnode mytest.js
経由で実行され、 NO_COLOR
が設定されていない場合、色が有効になります。 assert
モジュールをミラーリングするt
提供し、結果と診断メッセージをコンソールに出力するため、spok はt
使用してアサーションを実行します。完全な例については、./example/tape.js および ./example/tape-nested.js を参照してください。
Spok は、たとえば cypress.io でテストを実行する場合など、 expect
とともにそのまま使用できます。
カスタムのアサート関数を作成し、それを spok に渡すだけです。 tape
を使用してテストを実行する場合の主な違いは、比較されたオブジェクト内の 1 つのプロパティが一致しない場合、テストは直ちに失敗することです。
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
ほとんどの場合にうまく機能しますが、場合によっては、より詳細な制御が必要になります。
デフォルトでは、 spok は特定のアサーションが満たした仕様、つまりsatisfies: spok.range(2, 4)
。 spok.printSpec = false
を使用してこれをオフにできます。
一方、satisified 仕様についてさらに詳細が必要な場合は、 spok.printDescription = true
実行して、 spok にsatisfies: spok.range(2, 4) 2 <= value <= 4
ような内容を出力させます。
仕様と説明はグレーで印刷されるため、テスト出力の実際の値に集中できます。
DocToc で生成された目次
spok は、いくつかの共通仕様関数を提供します。ただし、独自の関数を作成することもできます。仕様が満たされている場合はtrue
返し、満たされていない場合はfalse
を返すだけです (上記の例を参照)。
他の人にとって役立つ仕様関数を作成した場合は、テストと一緒に追加し、PR を提供してください。
spok.*
比較関数名は、覚えやすくするためにbash比較演算子から派生しています。
指定された仕様をオブジェクトに対してチェックします。
テストが実行されると、提供された各仕様が検証され、そのうちの 1 つが失敗するとテスト失敗が発生する一方で、実際の値が視覚的に確認できるように出力されます。
パラメータ
t
アサーション関数equal
およびdeepEqual
持つオブジェクト(オブジェクトを比較するため) - Tap 、 tape 、 assert 、 Node.js TestContext 、またはこれらを持ち互換性のある他のライブラリを使用します。obj
Object 仕様を検証するオブジェクトspecifications
検証対象の仕様仕様タイプの関係についてそれほど厳密ではないspok
のバージョン。つまり、タイプを手動でオーバーライドしたり、指定されたパラメータからタイプを派生したりできます。
タイプを調整できない場合にのみ使用して、プレーンspok
が機能します。
指定された数値が指定された範囲内にあること、つまりmin<= x <=max
あることを指定します。
var spec = {
x : spok . range ( 1 , 2 ) // specifies that x should be >=1 and <=2
}
パラメータ
min
最小数値max
最大数数値が指定された基準より大きいことを指定します。
var spec = {
x : spok . gt ( 1 ) // specifies that x should be >1
}
パラメータ
n
数値基準数値が指定された基準以上であることを指定します。
var spec = {
x : spok . ge ( 1 ) // specifies that x should be >=1
}
パラメータ
n
数値基準数値が指定された基準より小さいことを指定します。
var spec = {
x : spok . lt ( 1 ) // specifies that x should be < 1
}
パラメータ
n
数値基準数値が指定された基準以下であることを指定します。
var spec = {
x : spok . le ( 1 ) // specifies that x should be <=1
}
パラメータ
n
数値基準値が他と等しくないことを指定します。
var spec = {
x : spok . ne ( undefined ) // specifies that x should be defined
}
パラメータ
value
任意の基準値がゼロより大きいことを指定します
var spec = {
x : spok . gtz
}
値がゼロ以上であることを指定します
var spec = {
x : spok . gez
}
値がゼロ未満であることを指定します
var spec = {
x : spok . ltz
}
値がゼロ以下であることを指定します
var spec = {
x : spok . lez
}
入力が特定のタイプであることを指定します。
var spec = {
x : spok . type ( 'number' ) // specifies that x should be a Number
}
パラメータ
t
文字列の期待される型入力が配列であることを指定します。
var spec = {
x : spok . array // specifies that x should be an Array
}
入力が特定の数の要素を含む配列であることを指定します
var spec = { x: spok.arrayElements(2) // x が 2 つの要素を持つ配列であることを指定します }
パラメータ
n
Number要素数入力が、指定された範囲内の要素数を含む配列であることを指定します
var spec = { x: spok.arrayElementsRange(2, 4) // x が 2 ~ 4 個の要素を持つ配列であることを指定します }
パラメータ
min
Number要素の最小数max
Number要素の最大数タイプ number およびisNaN(x)
の入力がfalse
返すことを指定します。
var spec = {
x : spok . number // specifies that x should be a Number
}
入力が文字列であることを指定します。
var spec = {
x: spok.string // specifies that x should be a String
}
入力が関数であることを指定します。
var spec = {
x: spok.function // specifies that x should be a function
}
入力がオブジェクトであり、 null
ではないことを指定します。
var spec = {
x : spok . definedObject // specifies that x is a non-null object
}
文字列が指定された部分文字列で始まることを指定します。
注意: ES6のstartsWith
関数を持つnode.jsでのみ利用可能
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
パラメータ
what
文字列部分文字列で始まるか文字列が指定された部分文字列で終わることを指定します。
注意: ES6のendsWith
関数を持つnode.jsでのみ利用可能
var spec = {
x : spok . endsWith ( 'hello' ) // specifies that x should start with 'hello'
}
パラメータ
what
文字列部分文字列で始まるか文字列が指定された正規表現と一致する必要があることを指定します。
var spec = {
x : spok . test ( / hello$ / ) // specifies that x should match /hello$/
}
パラメータ
regex
test
によって文字列がチェックされるRegExp正規表現値が定義されていること、つまり、値がnull
でもundefined
でもないことを指定します。
var spec = {
x : spok . defined
}
値が notDefined であること、つまりnull
またはnotDefined
あることを指定します。
var spec = {
x : spok . notDefined
}
マサチューセッツ工科大学