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

Node.js assert.doesNotThrow() 함수 완벽 정리 – 문법, 매개변수, 실전 예제

Node.js의 assert 모듈은 코드의 특정 조건을 검증(assertion)하기 위한 다양한 기능을 제공합니다. 그중 assert.doesNotThrow()는 전달된 함수가 에러를 던지지 않는지 확인하는 메서드입니다. 이 함수가 호출되면 인자로 받은 콜백 함수(fn)가 즉시 실행되며, 만약 해당 함수가 에러를 발생시키면 AssertionError가 throw됩니다.

문법(Syntax)

assert.doesNotThrow(fn, [error], [message])

매개변수(Parameters)

  • fndoesNotThrow가 실행될 때 호출되는 함수입니다. 에러 대신 이 함수가 실행되며, 이 함수에서 에러가 발생하는지 여부를 검사합니다.

  • error – (선택 사항) 검사할 에러를 지정하는 정규식(regular expression) 또는 에러 클래스입니다. 지정한 패턴과 일치하는 에러가 발생하면 AssertionError가 던져집니다.

  • message – (선택 사항) 사용자가 직접 정의한 메시지로, AssertionError 발생 시 함께 출력됩니다.

Assert 모듈 설치하기

npm install assert

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

npm version assert

모듈 불러오기

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

예제 1: 기본 사용법

doesNotThrow.js라는 이름의 파일을 생성하고 아래 코드를 붙여넣습니다. 파일 생성 후 다음 명령어로 실행합니다.

node doesNotThrow.js

doesNotThrow.js

// 모듈 불러오기
const assert = require('assert').strict;

try {
    // doesNotThrow 호출 - 에러가 발생하지 않아야 통과
    assert.doesNotThrow(
        () => {
            throw new TypeError('잘못된 값이 입력되었습니다. 확인해 주세요!');
        },
    );
} catch(error) {
    console.log("Error:", error)
}

실행 결과

콜백 함수 내부에서 TypeError가 강제로 발생했기 때문에, doesNotThrow는 "원치 않는 예외(unwanted exception)"로 간주하고 AssertionError를 던집니다.

C:\home\node>> node doesNotThrow.js
Error: { AssertionError [ERR_ASSERTION]: Got unwanted exception.
Actual message: "Wrong value received. Please check !"
    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: false,
name: 'AssertionError [ERR_ASSERTION]',
code: 'ERR_ASSERTION',
actual:
    TypeError: Wrong value received. Please check !
        at assert.doesNotThrow (/home/node/test/assert.js:8:9)
        at getActual (assert.js:567:5)
        at Function.doesNotThrow (assert.js:687:32)
        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),
    expected: undefined,
    operator: 'doesNotThrow' }

예제 2: error와 message 옵션 활용

이번에는 선택 매개변수인 error(정규식)와 message를 함께 사용해 보겠습니다.

// 모듈 불러오기
const assert = require('assert').strict;

try {
    assert.doesNotThrow(
        () => {
            throw new TypeError('잘못된 값이 전달되었습니다 !!');
        },
        /abcd/,
        'Whoops'
    );
} catch(error) {
    console.log("Error:", error)
}

실행 결과

발생한 에러(TypeError)가 두 번째 인자로 전달된 정규식 /abcd/와 일치하지 않기 때문에, 이번에는 AssertionError가 아닌 원래의 TypeError가 그대로 catch 블록으로 전달됩니다. 즉, error 매개변수는 특정 패턴의 에러만 필터링하여 검증하고 싶을 때 유용하게 사용됩니다.

C:\home\node>> node doesNotThrow.js
Error: TypeError: Value passed is wrong !!
    at assert.doesNotThrow (/home/node/test/assert.js:7:9)
    at getActual (assert.js:567:5)
    at Function.doesNotThrow (assert.js:687:32)
    at Object. (/home/node/test/assert.js:5: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:653:32)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)

정리

assert.doesNotThrow()는 테스트 코드 작성 시 "이 함수는 절대 에러를 던지면 안 된다"는 조건을 검증할 때 유용한 메서드입니다. 단, 에러 객체를 검사하는 방식이라 동작이 직관적이지 않을 수 있으므로, 최신 Node.js 환경에서는 assert.rejects()assert.throws()와 함께 상황에 맞게 적절히 활용하는 것이 좋습니다.