상용구 테스트를 작성하지 못하도록 특정 사양 세트에 대해 특정 개체를 확인합니다.
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
env var가 1|true
색상으로 설정된 경우 항상 색상이 적용됩니다.NO_COLOR
env var가 1|true
색상으로 설정된 경우 절대 사용되지 않습니다.node --test mytest.js
를 통해 테스트가 실행되고 FORCE_COLOR
설정되지 않은 경우 colorse가 비활성화됩니다.node mytest.js
통해 테스트가 실행되고 NO_COLOR
설정되지 않은 경우 색상이 활성화됩니다. assert
모듈을 미러링하고 결과와 진단 메시지를 콘솔에 인쇄하는 t
를 제공하므로 spok는 t
사용하여 어설션을 수행합니다.전체 예제는 ./example/tape.js 및 ./example/tape-nested.js를 참조하세요.
예를 들어 cypress.io로 테스트를 실행할 때 Spok는 expect
와 함께 즉시 사용할 수 있습니다.
사용자 정의 Assert 함수를 생성하고 이를 Spoke에 전달하기만 하면 됩니다. tape
사용하여 테스트를 실행할 때의 주요 차이점은 비교된 개체의 단일 속성이 일치하지 않으면 테스트가 즉시 실패한다는 것입니다.
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
통해 이를 끌 수 있습니다.
반면에 만족된 사양에 대한 자세한 내용을 원한다면 spok.printDescription = true
수행하여 spok에서 satisfies: spok.range(2, 4) 2 <= value <= 4
와 같은 내용을 인쇄하도록 하세요.
사양 및 설명은 회색으로 인쇄되므로 테스트 출력의 실제 값에 집중할 수 있습니다.
DocToc으로 생성된 목차
spok은 몇 가지 일반적인 사양 기능을 제공합니다. 그러나 자신만의 함수를 작성할 수도 있습니다. 사양이 충족되면 true
반환하고 그렇지 않으면 false
반환합니다(위의 예 참조).
다른 사람에게 유용할 사양 기능을 작성하는 경우 테스트와 함께 추가하고 PR을 제공하세요.
spok.*
비교 함수 이름은 기억하기 쉽도록 bash 비교 연산자에서 파생됩니다.
객체에 대해 주어진 사양을 확인합니다.
테스트가 실행되면 실제 값이 인쇄되어 시각적으로 확인되며, 제공된 각 사양이 검증되고 그 중 하나가 실패하면 테스트 실패가 발생합니다.
매개변수
t
주장 기능이 equal
및 deepEqual
(객체 비교를 위해)이 있는 객체 - tap , tape , Assert , Node.js TestContext 또는 이를 가지고 있어 호환되는 다른 라이브러리를 사용하십시오.obj
사양을 확인하기 위해 객체 를 객체화합니다 .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
모든 기준값이 0보다 크다는 것을 지정합니다.
var spec = {
x : spok . gtz
}
값이 0보다 크거나 같음을 지정합니다.
var spec = {
x : spok . gez
}
값이 0보다 작도록 지정합니다.
var spec = {
x : spok . ltz
}
값이 0보다 작거나 같음을 지정합니다.
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
요소 수입력이 주어진 범위의 요소 수를 포함하는 배열임을 지정합니다.
var spec = { x: spok.arrayElementsRange(2, 4) // x가 2-4개의 요소가 있는 배열이어야 함을 지정합니다. }
매개변수
min
Number 최소 요소 수max
수 최대 요소 수 유형 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
}
MIT