반응형

Node.js에서는 코드의 동작을 검증하기 위해 다양한 단언(assertion) 함수들을 제공하고 있다. 이 중 assert.doesNotThrow()와 assert.doesNotReject() 함수는 코드 블록이 에러를 발생시키지 않는다는 것을 확인하는데 사용된다. 그러나 이 두 함수는 각각 다른 유형의 코드에 적용되므로 그 차이점을 이해하는 것이 중요하다.

1. assert.doesNotThrow(block[, error][, message]): 이 함수는 동기 코드 블록이 주어진 에러를 발생시키지 않는지 확인한다. 만약 코드 블록이 에러를 발생시키면, 그 에러는 무시되고 대신 AssertionError가 발생한다. 선택적으로 error 인자를 제공하여 특정 타입의 에러만 검사할 수 있다. 아래는 예시이다.

 

const assert = require('assert');

function doesNotError() {
  if (Math.random() < 0.5) {
    throw new Error('Random error!');
  }
}

try {
  assert.doesNotThrow(
    doesNotError,
    Error,
    'The function doesNotError has thrown an exception'
  );
  console.log('The function doesNotError has not thrown an exception');
} catch (err) {
  console.error(err);
}

 

2. assert.doesNotReject(block[, error][, message]): 이 함수는 비동기 코드 블록이 주어진 에러를 발생시키지 않는지 확인한다. block은 Promise를 반환해야 한다. 만약 Promise가 거부되면, 그 거부 값은 무시되고 대신 AssertionError가 발생한다. 아래는 예시이다.

 

const assert = require('assert');

async function doesNotReject() {
  if (Math.random() < 0.5) {
    throw new Error('Random error!');
  }
}

assert.doesNotReject(
  doesNotReject(),
  Error,
  'The function doesNotReject has thrown an exception'
)
.then(() => console.log('The function doesNotReject has not thrown an exception'))
.catch((err) => console.error(err));

 

결국, assert.doesNotThrow()는 동기 코드를, assert.doesNotReject()는 Promise를 반환하는 비동기 코드를 검사하는데 사용된다. 이들 함수를 이해하고 적절히 사용함으로써, 코드가 예상대로 동작하는지 확신할 수 있고, 그렇지 않다면 어디서 문제가 발생하는지를 식별할 수 있다.

 

반응형
얼은펭귄