Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js assert.deepStrictEqual() 함수 사용법 완벽 정리

Node.js의 assert 모듈은 함수 검증(assertion)을 위한 다양한 기능을 제공하며, 그중 하나가 바로 deepStrictEqual() 함수입니다. 이 함수는 실제 값(actual)과 기대값(expected) 간의 깊은 동등성(deep equality)을 엄격하게 비교하는 데 사용됩니다. 두 값이 일치하지 않으면 AssertionError가 발생합니다.

deepStrictEqual()은 단순히 값을 비교하는 것을 넘어, 객체의 프로토타입까지 비교하고 자료형(type)까지 엄격하게 구분한다는 점에서 deepEqual()과 차별화됩니다. 예를 들어 숫자 3과 문자열 '3'은 느슨한 비교에서는 같아 보일 수 있지만, 이 함수에서는 서로 다른 값으로 판정됩니다.

문법(Syntax)

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

매개변수(Parameters)

각 매개변수에 대한 설명은 다음과 같습니다.

  • actual – 기대값과 비교하여 평가될 실제 값입니다.

  • expected – 실제 값과 일치하는지 확인할 기대값입니다.

  • message – 실제 값과 기대값이 일치하지 않을 때 출력할 문자열 메시지입니다. 선택 사항(optional)으로, 생략 시 기본 에러 메시지가 표시됩니다.

Assert 모듈 설치하기

npm install assert

assert 모듈은 Node.js에 내장된 모듀이므로 별도 설치 없이도 바로 사용할 수 있습니다. 최신 버전의 assert 모듈을 사용하려면 아래 명령어로 현재 버전을 확인할 수 있습니다.

npm version assert

모듈 불러오기

코드에서 assert 모듈을 사용하려면 먼저 해당 모듈을 임포트해야 합니다.

const assert = require('assert');

엄격한(strict) 모드로 사용하고 싶다면 아래와 같이 .strict를 붙여 임포트할 수도 있습니다.

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

예제 1: 자료형이 다른 경우

assertDeepStrict.js라는 이름의 파일을 생성하고 아래 코드를 작성한 뒤, 다음 명령어로 실행합니다.

node assertDeepStrict.js

assertDeepStrict.js

// assert 모듈 임포트
const assert = require('assert').strict;

try {
    // deepStrictEqual 함수 호출
    // 숫자 3과 문자열 '3'을 비교
    assert.deepStrictEqual({ a: 3 }, { a: '3' });
    console.log("에러가 발생하지 않았습니다...")
} catch(error) {
    console.log("Error: ", error)
}

출력 결과

C:\home\node>> node assertDeepStrict.js
Error: { AssertionError [ERR_ASSERTION]: Input A expected to strictly deepequal input B:
+ expected - actual
    {
      - a: 3
      + a: '3'
    }
    at Object.<anonymous> (/home/node/mysql-test/assert.js:6:9)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
generatedMessage: true,
name: 'AssertionError [ERR_ASSERTION]',
code: 'ERR_ASSERTION',
actual: { a: 3 },
expected: { a: '3' },
operator: 'deepStrictEqual' }

위 예제에서 한쪽 값은 정수(integer) 3이고, 다른 쪽 값은 문자열(string) '3'입니다. deepStrictEqual()은 자료형까지 엄격하게 비교하므로, 두 값이 다르다고 판단하여 위와 같은 AssertionError를 발생시켰습니다.

예제 2: 자료형이 같은 경우

이번에는 두 값이 모두 동일한 자료형인 경우를 살펴보겠습니다.

// assert 모듈 임포트
const assert = require('assert').strict;

try {
    // deepStrictEqual 함수 호출
    // 두 값 모두 문자열 '3'
    assert.deepStrictEqual({ a: '3' }, { a: '3' });
    console.log("에러가 발생하지 않았습니다...")
} catch(error) {
    console.log("Error: ", error)
}

출력 결과

C:\home\node>> node assertDeepStrict.js
에러가 발생하지 않았습니다...

두 객체의 값과 자료형이 모두 일치하기 때문에 이번에는 에러 없이 정상적으로 코드가 실행되었음을 확인할 수 있습니다.

마무리

assert.deepStrictEqual()은 테스트 코드 작성 시 객체나 배열 등 중첩된 데이터 구조의 동등성을 엄격하게 검증해야 할 때 매우 유용합니다. 자료형 변환에 의한 의도치 않은 통과(false positive)를 방지할 수 있어, 보다 신뢰성 높은 테스트를 작성하는 데 도움이 됩니다.