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)를 방지할 수 있어, 보다 신뢰성 높은 테스트를 작성하는 데 도움이 됩니다.