معرفی
ماژول Assert یک ماژول درونی در node.js است که برای نوشتن Test Case کاربرد دارد.
ماژول Assert در واقع یک روش برای انجام تستهای واحد بر روی عبارتهای node.js است. اگر تست کیس مورد نظر منجر به شکست یا 0 یا false شد، آنگاه یک خطا به وقوع پیوسته است. اگر تست کیس مورد نظر قبول شد و یا 1 یا true شد، آنگاه هیچ فیدبک (بازخوردی) دیده نمیشود.
اگر چه این ماژول فقط به صورت درونی در نظر گرفته شده است، اما ما میتوانیم به صورت زیر از بیرون نیز به آن دسترسی داشته باشیم:
var assert = require('assert');
دقت داشته باشید که ماژول assert
، یک فریمورک تست نیست و نباید با آن مانند یک فریمورک تست برخورد کنیم.
چگونه ماژول Assert کار میکند؟
برخی از رایجترین مثالهای کاربرد ماژول Assert را در ادامه این مطلب برای شما آوردهام. دقت کنید که در خلال این مثالها به طور کامل نحوه ی استفاده از ماژول Assert در کد نویسی، توضیح داده شده است.
- قطعه کد شماره 1: در این قطعه کد ما یک عملیات مقایسه را پیادهسازی کردهایم. در این عملیات مقایسه چک میکنیم که آیا متغییر a از متغییر b بزرگتر هست یا خیر.
//Name of the file: assert-1.js var assert = require('assert'); var a = 10; var b = 20; assert(a > b);
ما میتوانیم آن را به روش زیر اجرا کنیم:
- قطعه کد شماره 2: در این مثال، ما یک عملیات مقایسهی دقیق (هم از لحاظ مقدار و هم از لحاظ نوع) انجام میدهیم و بررسی میکنیم که آیا مجموع سه عدد با خروجی مورد انتظار برابر است یا خیر.
//Name of the file: assert-snippet-true.js var assert = require('assert'); function demo (x,y,z) { var value = x + y + z ; return value; } var output = demo(4,1,10); console.log("Output : " + output); var expected_output = 15; console.log("Expected Output : " + expected_output); assert( output === expected_output , 'Test case is true so this will not be printed');
ما میتوانیم آن را به روش زیر اجرا کنیم:
- قطعه کد شماره 3: در این مثال، ما یک عملیات مقایسهای دقیق انجام میدهیم و بررسی میکنیم که آیا مجموع سه عدد با خروجی مورد انتظار برابر است یا خیر:
//Name of the file : assert-snippet-false.js var assert = require('assert'); function demo (x,y,z) { var value = x + y + z ; return value; } var output = demo(3,2,10); console.log("Output : " + output); var expected_output = 12; console.log("Expected Output : " + expected_output); assert( output === expected_output , 'This is not what we expected');
ما میتوانیم آن را به روش زیر اجرا کنیم:
متدهای ماژول assert
هر کدام از متدهای ماژول assert در node.js با جزییات بیشتر در قالب نمونه کد در قسمت پایین توضیح داده شدهاند:
- assert: این متد بررسی میکند که آیا عبارت، true هست یا خیر. این متد عملکردی مشابه عملکرد متد
()assert.ok
دارد.
نحوی نوشتن متد assert:assert(value[, message])
مثال:
//Name of the file : assert.js var assert = require('assert'); var a = 10; var b = 20; assert(a > b , "A should be greater than B");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.deepEqual: این متد برای بررسی برابری مقدار دو متغییر مورد استفاده قرار میگیرد. دقت نمایید که این مقایسه با استفاده از عملگر
==
انجام میشود.
نحوی نوشتن متد assert.deepEqual:assert.deepEqual(actual, expected[, message])
مثال:
//Name of the file : assert.deepEqual.js var assert = require('assert'); var a = 10; var b = '10'; var c = 10.25; //Case 1 assert.deepEqual(a,b, "Nothing printed because they are using == for comparison"); //Case 2 assert.deepEqual(a,c, "Error because values doesn't match");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.deepStrictEqual : این متد برای بررسی برابری دو متغییر مورد استفاده قرار میگیرد. دقت نمایید که این مقایسه با عملگر
===
انجام میشود.
- نحوی نوشتن متد assert.deepStrictEqual:
assert.deepStrictEqual(actual, expected[, message])
مثال:
//Name of the file : assert.deepStrictEqual.js var assert = require('assert'); var a = 10; var b = '10'; assert.deepStrictEqual(a,b, "Error because they are using === for comparison");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.equal : این متد برای بررسی برابری، بین مقدار واقعی و مقدار مورد انتظار یک متغییر، مورد استفاده قرار میگیرد. این مقایسه، با استفاده از عملگر
==
انجام میشود.
نحوی نوشتن متد assert.equal:assert.equal(actual, expected[, message])
مثال:
//Name of the file : assert.equal.js var assert = require('assert'); var a = 50; var b = '50'; var c = 50.25; //Case 1 assert.equal(a,b, "Nothing printed because they are using == for comparison"); //Case 2 assert.equal(a,c, "Error because values doesn't match");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.fail: این متد برای ارسال یک AssertionError استفاده میشود.
نحوی نوشتن متد assert.fail://Case 1 assert.fail(message) //Case 2 assert.fail(actual, expected[, message[, operator[, stackStartFunction]]])
مثال:
//Name of the file : assert.fail.js var assert = require('assert'); assert.fail(1, 2, 'This is an error', '>');
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.ifError: در این متد، اگر نتیجه ارزیابی یک خطای خاص بر روی یک قطعه کد، true شود، پیام خطای مناسب را ارسال میکند.
نحوی نوشتن متد assert.ifError:assert.ifError(value)
مثال:
//Name of the file : assert.ifError.js var assert = require('assert'); //Case 1 : No error assert.ifError(0); //Case 2 : throws 1 assert.ifError(1); //Case 3 : throws error assert.ifError('error');
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.notDeepEqual: این متد برای بررسی هر گونه نابرابری عمیق (deep inequality) استفاده میشود. دقت کنید که این متد، از لحاظ عملکرد متضاد متد
()assert.deepEqual
است.
نحوی نوشتن متد assert.notDeepEqual:assert.notDeepEqual(actual, expected[, message])
مثال:
//Name of the file : assert.notDeepEqual.js var assert = require('assert'); var a = 10; var b = 12; var c = '10'; //Case 1 assert.notDeepEqual(a,b, "Nothing printed because they are using !== for comparison"); //Case 2 assert.notDeepEqual(a,c, "Error because values match here");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.notDeepStrictEqual: این متد برای بررسی هر گونه نابرابری شدیداً عمیق (deep strict inequality یعنی از لحاظ نوع و مقدار) مورد استفاده قرار میگیرد. این متد از لحاظ عملکرد متضاد متد
()assert.deepStrictEqual
است.
نحوی نوشتن متد assert.notDeepStrictEqual:assert.notDeepStrictEqual(actual, expected[, message])
مثال:
//Name of the file : assert.notDeepStrictEqual.js var assert = require('assert'); var a = 10; var b = '10'; var c = 10; //Case 1 assert.notDeepStrictEqual(a,b, "No Error because they are checking for not deep strict equal"); //Case 2 assert.notDeepStrictEqual(a,c, "Error because values are equal");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.notEqual: این متد، برابر نبودن مقادیر دو متغییر را بررسی میکند. دقت کنید برای انجام این کار از
!=
(عملگر نابرابری) استفاده میشود.
نحوی نوشتن متد assert.notEqualassert.notEqual(actual, expected[, message])
مثال:
//Name of the file: assert.notEqual.js var assert = require('assert'); var a = 10; var b = 10.25; var c = '10'; //Case 1 assert.notEqual(a,b, "Nothing printed because they are using != for comparison"); //Case 2 assert.notEqual(a,c, "Error because values match");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.notStrictEqual: این متد، برابر نبودن مقادیر دو متغییر را بررسی میکند. دقت کنید برای انجام این کار از
! ==
(عملگر نابرابری که علاوه بر مقدار، نابرابری در نوع هم بررسی میکند) استفاده میشود.
نحوی نوشتن متد assert.notStrictEqual:assert.notStrictEqual(actual, expected[, message])
مثال:
//Name of the file : assert.notStrictEqual.js var assert = require('assert'); var a = 10; var b = 10.25; var c = '10'; var d = 10; //Case 1 assert.notStrictEqual(a,b, "Nothing printed because they are using !== for comparison"); //Case 2 assert.notStrictEqual(a,c, "Nothing printed because still its not a match"); //case 3 assert.notStrictEqual(a,d, "Error because its a match");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.ok: این متد برای بررسی اینکه آیا یک مقدار درست است یا نه استفاده میشود.
نحوی نوشتن متد assert.ok:assert.ok(value[, message])
مثال:
//Name of the file : assert.ok.js var assert = require('assert'); //Case 1 assert.ok(true, "No error "); //Case 2 assert.ok(1,"No error"); //Case 3 assert.ok(false,"It is an error"); //Case 4 assert.ok(0 , " Again error"); //case 5 var a = 10; var b = 20; assert(a > b , "A should be greater than B");
ما میتوانیم آن را به روش زیر اجرا کنیم:
دقت کنید که چون CASE 5 رخ داده است، اولین پیام خطا که در واقع در CASE 3 ایجاد شده است به عنوان خروجی ارسال شده است.
- assert.strictEqual: این متد برای بررسی تساوی مقادیر دو متغییر مورد استفاده قرار میگیرد برای انجام این کار نیز، عملگر
===
را مورد استفاده قرار میدهد.
نحوی نوشتن متد assert.strictEqual:assert.strictEqual(actual, expected[, message])
مثال:
//Name of the file : assert.strictEqual.js var assert = require('assert'); var a = 10; var b = '10'; var c = 10; //Case 1 assert.strictEqual(a,c, "Nothing printed"); //Case 2 assert.strictEqual(a,b, "Error acc to strict equality comparison");
ما میتوانیم آن را به روش زیر اجرا کنیم:
- assert.throws: این متد زمانی استفاده میشود که ما انتظار داریم که دستورات موجود در بلوک یک تابع، یک خطا را ارسال کنند.
نحوی نوشتن متد assert.throws:assert.throws(block[, error][, message])
مثال:
//Name of the file : assert.throw.js var assert = require('assert'); assert.throws( () => { throw new Error('Wrong value'); }, Error );
- assert.doesNotThrow: این متد، از لحاظ عملکرد متضاد متد
assert.throws
است.
نحوی نوشتن متد assert.doesNotThrow:assert.doesNotThrow(block[, error][, message])
خلاصه
در درس 27ام از سلسله دروس 30 روز با نود جی اس، ما یاد گرفتیم که ماژول assert چیست و چگونه از ماژول assert در کدهای خودمان استفاده کنیم. ما همچنین در مورد تمامی متدهای ماژول assert با استفاده از مثالهای عملی، نکات فراوانی را آموختیم. این متدها عبارت بودند از:
- ()assert
- ()assert.deepEqual
- ()assert.deepStrictEqual
- ()assert.doesNotThrow
- ()assert.equal
- ()assert.fail
- ()assert.ifError
- ()assert.notDeepEqual