يتحقق من كائن معين مقابل مجموعة معينة من المواصفات لمنعك من كتابة اختبارات معيارية.
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
، فسيتم تعطيل Colorsenode mytest.js
ولم يتم تعيين NO_COLOR
، فسيتم تمكين الألوان t
الذي يعكس وحدة assert
ويطبع أيضًا النتائج ورسالة التشخيص إلى وحدة التحكم، وبالتالي يستخدم spok t
لتنفيذ التأكيداتراجع ./example/tape.js و ./example/tape-nested.js للحصول على أمثلة كاملة.
يمكن استخدام Spok خارج الصندوق مع expect
، على سبيل المثال عند إجراء الاختبارات باستخدام cypress.io.
ما عليك سوى إنشاء وظيفة تأكيد مخصصة وتمريرها إلى spok. يتمثل الاختلاف الرئيسي في إجراء الاختبارات باستخدام 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
إذا لم تكن كذلك (انظر المثال أعلاه).
إذا كتبت وظيفة مواصفات قد تكون مفيدة للآخرين، فيرجى إضافتها مع الاختبار وتقديم العلاقات العامة.
spok.*
أسماء وظائف المقارنة مشتقة من عوامل مقارنة bash لتسهيل تذكرها.
التحقق من المواصفات المحددة مقابل الكائن.
عند إجراء الاختبارات، تتم طباعة القيم الفعلية للتحقق بصريًا بينما يتم التحقق من صحة كل المواصفات المقدمة ويتسبب فشل الاختبار في حالة فشل أحدها.
حدود
t
له وظائف تأكيد equal
deepEqual
(لمقارنة الكائنات) - استخدم النقر أو الشريط أو التأكيد أو 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 يجب أن يكون مصفوفة مكونة من عنصرين }
حدود
n
عدد عدد العناصريحدد أن الإدخال عبارة عن مصفوفة تحتوي على عدد من العناصر في نطاق معين
var spec = { x: spok.arrayElementsRange(2, 4) // يحدد أن x يجب أن يكون مصفوفة تحتوي على 2-4 عناصر }
حدود
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
}
يحدد أن القيمة غير محددة، أي أنها إما null
أو notDefined
.
var spec = {
x : spok . notDefined
}
معهد ماساتشوستس للتكنولوجيا