ตรวจสอบออบเจ็กต์ที่กำหนดกับชุดข้อกำหนดเฉพาะที่กำหนด เพื่อป้องกันไม่ให้คุณเขียนการทดสอบสำเร็จรูป
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
ดังนั้น colore จะถูกปิดใช้งานnode mytest.js
และไม่ได้ตั้งค่า NO_COLOR
สีจะถูกเปิดใช้งาน t
ซึ่งสะท้อนโมดูล assert
และพิมพ์ผลลัพธ์และข้อความการวินิจฉัยไปยังคอนโซลด้วย ดังนั้น spok จึงใช้ t
เพื่อทำการยืนยันดู ./example/tape.js และ ./example/tape-nested.js สำหรับตัวอย่างทั้งหมด
สามารถใช้ Spok ได้ทันทีเมื่อแกะกล่องด้วย expect
เช่น เมื่อรันการทดสอบด้วย cypress.io
เพียงสร้างฟังก์ชันยืนยันแบบกำหนดเองแล้วส่งต่อไปยังสโปก ข้อแตกต่างหลักในการรันการทดสอบด้วย 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
ในทางกลับกัน หากคุณต้องการรายละเอียดเพิ่มเติมเกี่ยวกับสเป็คที่น่าพอใจ do spok.printDescription = true
แทนที่จะให้ spok พิมพ์สิ่งต่าง ๆ เช่น satisfies: spok.range(2, 4) 2 <= value <= 4
ข้อมูลจำเพาะและคำอธิบายจะพิมพ์เป็นสีเทา เพื่อให้คุณสามารถมุ่งเน้นไปที่ค่าจริงของผลการทดสอบได้
สารบัญ ที่สร้างด้วย DocToc
spok มีฟังก์ชันข้อกำหนดทั่วไปบางประการ อย่างไรก็ตาม คุณสามารถเขียนฟังก์ชันของคุณเองได้เช่นกัน เพียงส่งคืน true
หากข้อกำหนดตรงตามข้อกำหนด และเป็น false
หากไม่ตรงตามข้อกำหนด (ดูตัวอย่างด้านบน)
หากคุณเขียนฟังก์ชันข้อกำหนดที่จะเป็นประโยชน์ต่อผู้อื่น โปรดเพิ่มพร้อมกับการทดสอบและจัดทำ PR
spok.*
ชื่อฟังก์ชันการเปรียบเทียบได้มาจากตัวดำเนินการเปรียบเทียบ bash เพื่อให้จดจำได้ง่ายขึ้น
ตรวจสอบข้อกำหนดที่กำหนดกับวัตถุ
เมื่อทำการทดสอบ ค่า จริง จะถูกพิมพ์ออกมาเพื่อตรวจสอบด้วยสายตา ในขณะที่ข้อมูลจำเพาะแต่ละอย่างได้รับการตรวจสอบ และจะเกิดความล้มเหลวในการทดสอบหากหนึ่งในนั้นล้มเหลว
พารามิเตอร์
t
Object ซึ่งมีฟังก์ชัน assertion 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
เกณฑ์ ใดๆระบุว่าค่ามากกว่าศูนย์
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
จำนวน จำนวนองค์ประกอบระบุว่าอินพุตเป็นอาร์เรย์ที่มีองค์ประกอบจำนวนหนึ่งในช่วงที่กำหนด
var spec = { x: spok.arrayElementsRange(2, 4) // ระบุว่า x ควรเป็นอาร์เรย์ที่มีองค์ประกอบ 2-4 }
พารามิเตอร์
min
จำนวน min จำนวนองค์ประกอบmax
จำนวนองค์ประกอบสูงสุด ระบุว่าการป้อนหมายเลขประเภทและ 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
}
ระบุว่าสตริงเริ่มต้นด้วยสตริงย่อยที่ระบุ
หมายเหตุ : ใช้ได้เฉพาะกับ node.js ซึ่งมีฟังก์ชัน ES6 startsWith
เท่านั้น
var spec = {
x : spok . startsWith ( 'hello' ) // specifies that x should start with 'hello'
}
พารามิเตอร์
what
สตริงที่กำหนดควรเริ่มต้นด้วยระบุว่าสตริงลงท้ายด้วยสตริงย่อยที่ระบุ
หมายเหตุ : ใช้ได้เฉพาะกับ node.js ซึ่งมีฟังก์ชัน ES6 endsWith
เท่านั้น
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
RegExp ซึ่งมีการตรวจสอบสตริงผ่าน test
ระบุว่าค่าถูกกำหนดไว้ กล่าวคือ ไม่เป็น null
หรือ undefined
var spec = {
x : spok . defined
}
ระบุว่าค่าเป็น notDefined กล่าวคือ เป็นค่า null
หรือ notDefined
var spec = {
x : spok . notDefined
}
เอ็มไอที