Node.js의 assert 모듈은 코드 검증을 위한 다양한 어설션(assertion) 기능을 제공합니다. 그중 assert.notDeepStrictEqual() 메서드는 두 객체가 깊은 엄격 동등(deep strict equal)하지 않음을 검증하는 데 사용됩니다. 만약 두 객체가 깊은 수준에서 엄격하게 동일하다면 AssertionError가 발생합니다.
문법
assert.notDeepStrictEqual(actual, expected, [message])
매개변수 설명
actual – 실제 값으로, 비교 대상이 되는 원본 값을 담습니다.
expected – 기대값으로, actual 매개변수와 비교하여 평가할 값을 담습니다.
message – 선택적(optional) 매개변수입니다. 어설션이 실패했을 때 출력할 사용자 정의 메시지를 지정할 수 있습니다.
assert 모듈 설치하기
npm install assert
assert 모듈은 Node.js에 내장된 기본 모듈이므로 별도로 설치하지 않고 바로 사용할 수도 있습니다. 최신 버전의 assert 모듈을 확인하려면 아래 명령어를 실행하세요.
npm version assert
모듈 가져오기
const assert = require("assert").strict;예제 1 – 서로 다른 객체 비교
notDeepStrictEqual.js라는 이름의 파일을 생성하고 아래 코드를 복사한 뒤, 해당 파일을 실행해 보겠습니다.
node notDeepStrictEqual.js
notDeepStrictEqual.js
// 모듈 가져오기
const assert = require('assert').strict;
try {
// actual과 expected 매개변수가 같은지 검사
assert.notDeepStrictEqual({ a: '21' }, { a: '24' });
console.log("객체가 서로 같지 않습니다")
} catch(error) {
console.log("Error: ", error)
}출력 결과
C:\home\node>> node notDeepStrictEqual.js 객체가 서로 같지 않습니다
두 객체의 프로퍼티 값이 각각 '21'과 '24'로 서로 다르기 때문에, notDeepStrictEqual 조건을 통과하여 에러 없이 정상적으로 실행됩니다.
예제 2 – 동일한 객체 비교
이번에는 두 객체가 완전히 동일한 경우를 살펴보겠습니다.
// 모듈 가져오기
const assert = require('assert').strict;
try {
// actual과 expected 매개변수가 같은지 검사
assert.notDeepStrictEqual({ a: '21' }, { a: '21' });
console.log("객체가 서로 같지 않습니다")
} catch(error) {
console.log("Error: ", error)
}출력 결과
C:\home\node>> node notDeepStrictEqual.js
Error: { AssertionError [ERR_ASSERTION]: Identical input passed to
notDeepStrictEqual:
{
a: '21'
}
at Object. (/home/node/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: '21' },
expected: { a: '21' },
operator: 'notDeepStrictEqual' }위 예제에서는 두 객체 모두 문자열 타입의 값 '21'을 가지고 있어 깊은 엄격 동등 상태입니다. 따라서 notDeepStrictEqual의 조건에 위배되어 ERR_ASSERTION 에러가 발생하는 것을 확인할 수 있습니다.
정리
assert.notDeepStrictEqual()은 테스트 코드 작성 시 두 값이 반드시 달라야 하는 경우를 검증할 때 유용합니다. 값뿐만 아니라 데이터 타입까지 엄격하게 비교한다는 점에서 느슨한 비교를 수행하는 notDeepEqual()과 차이가 있습니다.