Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ฟังก์ชัน assert.deepStrictEqual() ใน Node.js

โมดูล assert ใน Node.js มอบฟังก์ชันต่างๆ สำหรับการตรวจสอบเงื่อนไข (assertion) โดยฟังก์ชัน deepStrictEqual() ใช้สำหรับทดสอบความเท่ากันแบบลึก (deep equality) ระหว่างพารามิเตอร์ actual (ค่าจริง) และ expected (ค่าที่คาดหวัง) หากเงื่อนไขไม่เป็นจริง จะมีการโยนข้อผิดพลาด AssertionError

ไวยากรณ์ (Syntax)

assert.deepStrictEqual(actual, expected[, message])

พารามิเตอร์

  • actual – ค่าจริงที่จะนำมาเปรียบเทียบกับค่าที่คาดหวัง
  • expected – ค่าที่คาดหวังซึ่งจะนำมาเทียบกับค่าจริง
  • message – ข้อความสตริงที่จะแสดงเมื่อค่าทั้งสองไม่ตรงกัน (พารามิเตอร์นี้เป็นทางเลือก)

การติดตั้งโมดูล Assert

โมดูล assert เป็นโมดูลในตัว (built-in) ของ Node.js จึงไม่จำเป็นต้องติดตั้งเพิ่มเติม แต่หากต้องการตรวจสอบเวอร์ชันล่าสุด สามารถใช้คำสั่งด้านล่างได้:

npm version assert

การนำเข้าโมดูล

const assert = require("assert");

ตัวอย่างการใช้งาน

สร้างไฟล์ชื่อ assertDeepStrict.js และคัดลอกโค้ดด้านล่าง จากนั้นรันด้วยคำสั่ง node assertDeepStrict.js

assertDeepStrict.js

// นำเข้าโมดูล assert แบบ strict
const assert = require('assert').strict;

try {
  // เรียกใช้ deepStrictEqual เพื่อเปรียบเทียบออบเจกต์
  assert.deepStrictEqual({ a: 3 }, { a: '3' });
  console.log("No Error Occurred...");
} catch (error) {
  console.log("Error: ", error);
}

ผลลัพธ์

Error: {
  AssertionError [ERR_ASSERTION]: Input A expected to strictly deep-equal input B:
  + expected - actual
  {
    - a: 3
    + a: '3'
  }
  at Object. (/home/node/assertDeepStrict.js:6:9)
  ...
  operator: 'deepStrictEqual'
}

จากตัวอย่างข้างต้น ค่าหนึ่งเป็นตัวเลข (number) อีกค่าหนึ่งเป็นสตริง (string) ทำให้เกิดข้อผิดพลาด เนื่องจาก deepStrictEqual ตรวจสอบทั้งค่าและชนิดข้อมูล (strict equality)

ตัวอย่างที่ 2: ค่าที่ตรงกันทั้งค่าและชนิด

const assert = require('assert').strict;

try {
  assert.deepStrictEqual({ a: '3' }, { a: '3' });
  console.log("No Error Occurred...");
} catch (error) {
  console.log("Error: ", error);
}

ผลลัพธ์

No Error Occurred...

กรณีนี้ทั้งสองค่าเป็นสตริง '3' จึงผ่านการตรวจสอบโดยไม่มีข้อผิดพลาด