Node.js의 assert 모듈은 함수 검증(assertion)을 위한 다양한 기능을 제공하며, 그중 assert.equal() 함수는 실제 값(actual)과 기대 값(expected)이 서로 같은지 비교하는 데 사용됩니다. 조건이 충족되지 않으면 AssertionError가 발생합니다.
문법(Syntax)
assert.equal(actual, expected[, message])
매개변수(Parameters)
actual – 기대 값과 비교하여 평가할 실제 값입니다.
expected – 실제 값과 일치하는지 확인하기 위한 기대 값입니다.
message – 두 값이 일치하지 않을 경우 출력할 문자열 메시지입니다. 선택 사항(optional)으로 생략할 수 있습니다.
Assert 모듈 설치하기
npm install assert
assert 모듈은 Node.js에 내장(built-in)되어 있으므로 이 단계는 생략해도 됩니다. 최신 버전의 assert 모듈을 사용하려면 아래 명령어로 버전을 확인할 수 있습니다.
npm version assert
모듈 가져오기(Importing)
const assert = require("assert");예제 1: 값이 일치하지 않는 경우
assertEqual.js라는 이름의 파일을 생성하고 아래 코드를 복사한 뒤, 다음 명령어로 실행합니다.
node assertEqual.js
assertEqual.js
// 모듈 가져오기
const assert = require('assert').strict;
var a = 21;
var b = 20;
// 함수 호출
try {
// a와 b가 같은지 확인
assert.equal(a, b);
} catch(error) {
console.log("Error: ", error)
}출력 결과
C:\home\node>> node assertEqual.js
Error: { AssertionError [ERR_ASSERTION]: Input A expected to strictly equal
input B:
+ expected - actual
- 21
+ 20
at Object.<anonymous> (/home/node/mysql-test/assert.js:10: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: 21,
expected: 20,
operator: 'strictEqual' }위 예제에서 두 값(21과 20)이 서로 같지 않기 때문에 AssertionError가 발생한 것을 확인할 수 있습니다.
예제 2: 타입이 달라도 내용이 같은 경우
이번에는 또 다른 예제를 살펴보겠습니다.
// 모듈 가져오기
const assert = require('assert');
var a = 20;
var b = '20';
// 함수 호출
try {
// a와 b가 같은지 확인
assert.equal(a, b);
console.log("a and b are equal")
} catch(error) {
console.log("Error: ", error)
}출력 결과
C:\home\node>> node assert.js a and b are equal
위 예제에서 a는 정수(integer)이고 b는 문자열(string)로 타입은 다르지만, 내용 자체는 동일합니다. 따라서 assert.equal()은 느슨한 동등성(loose equality) 비교를 수행하기 때문에 두 값이 같다고 판단하고 에러 없이 통과됩니다.
마무리
assert.equal()은 내부적으로 ==(느슨한 동등 연산자)와 유사하게 동작하므로, 타입까지 엄격하게 검증하려면 assert.strictEqual()를 사용하는 것이 좋습니다. 테스트 코드 작성 시 상황에 맞는 assert 함수를 선택하면 더 안정적인 코드 검증이 가능합니다.