۳۰ روز با Node – روز بیست و هفتم: ماژول Assert در نود جی اس

13 بهمن 1397
Nodejs-assert-module

معرفی

ماژول 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);
    				
    

    ما می‌توانیم آن را به روش زیر اجرا کنیم:

بررسی روش assert equal

  • قطعه کد شماره 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');
    

    ما می‌توانیم آن را به روش زیر اجرا کنیم:

assert-snippet-true

به این نکته دقت کنید که اگر تست کیس مورد نظر ما، هیچ اشکالی در کدها پیدا نکند، هیچ‌گونه خروجی ایجاد نخواهد شد (بنابراین فقط زمانی خروجی داریم که خطایی رخ داده باشد)

  • قطعه کد شماره 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-snippet-false

متدهای ماژول 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

  • 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.deepEqual

  • 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.deepStrictEqual

  •  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.equal

  • 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.fail

  • 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.ifError

  • 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.notDeepEqual

  • 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.notDeepStrictEqual

  • assert.notEqual: این متد، برابر نبودن مقادیر دو متغییر را بررسی می‌کند. دقت کنید برای انجام این کار از!= (عملگر نابرابری) استفاده می‌شود.
    نحوی نوشتن متد assert.notEqual

    assert.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.notEqual

  • 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.notStrictEqual

  • 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");
    

    ما می‌توانیم آن را به روش زیر اجرا کنیم:

 

assert.ok

دقت کنید که چون 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.strictEqual

  • 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
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.