assert
assert 모듈이 지원하는 함수 목록 (node REPL 에서 실행, ctrl+D: exit)
$node
> require('assert')
{ [Function: ok]
  fail: [Function: fail],
  AssertionError: [Function: AssertionError],
  ok: [Circular],
  equal: [Function: equal],
  notEqual: [Function: notEqual],
  deepEqual: [Function: deepEqual],
  deepStrictEqual: [Function: deepStrictEqual],
  notDeepEqual: [Function: notDeepEqual],
  notDeepStrictEqual: [Function: notDeepStrictEqual],
  strictEqual: [Function: strictEqual],
  notStrictEqual: [Function: notStrictEqual],
  throws: [Function: throws],
  doesNotThrow: [Function: doesNotThrow],
  ifError: [Function: ifError] }기본예제
assert.equal(1,2) // 1, 2는 다르므로 에러
AssertionError [ERR_ASSERTION]: 1 == 2
assert.ok(0) // 0은 Falsy 하므로 에러
AssertionError [ERR_ASSERTION]: 0 == true심화예제
mkdir assert
cd assert
vi file.txt
[i] // 아래 text 입력
one
two
three
[esc -> :wq] // 저장 후 닫기
vi test.js
[i] // 아래 text 입력
  1 var assert = require('assert')
  2 var fs = require('fs')
  3
  4 assert.equal(1+2) // 오류 발생 예상 지점1
  5 countLines(function (err, n) {
  6   assert.ifError(err)
  7   assert.equal(n, 3) // 오류 발생 예상 지점2
  8 })
  9
 10 function countLines (cb) {
 11   fs.readFile('file.txt', 'utf8',  function (err, src) {
 12     if (err) cb(err)
 13     else cb(null, src.split('\n').length+100) // // 오류 발생 예상 지점3
 14   })
 15 }
[esc -> :wq] // 저장 후 닫기심화예제 - 실행
(본 예제에서는 실패하는 코드를 의도적으로 숨겨놓음으로서 테스트 실패와 성공 시의 차이점을 알아본다.)
$node test.js
assert.js:42
  throw new errors.AssertionError({
  ^
AssertionError [ERR_ASSERTION]: 3 == undefined첫 번째 오류 발생
4 assert.equal(1+2) // equal에 두 번째 파라미터가 지정되지 않아 발생.
4 assert.equal(1+2, 3) // 다음과 같이 수정 후 다시 실행두 번째 오류 발생
assert.js:42
  throw new errors.AssertionError({
  ^
AssertionError [ERR_ASSERTION]: 104 == 3오류 발생 지점
  5 countLines(function (err, n) {
  6   assert.ifError(err)
  7   assert.equal(n, 3) <-- 오류 발생 지점.
  8 })
  ..
  else cb(null, src.split('\n').length+100) // 의도적으로 100을 더하였기 때문. + 100을 없애고 다시 실행해보자.세 번째 오류 발생
assert.js:42
  throw new errors.AssertionError({
  ^
AssertionError [ERR_ASSERTION]: 4 == 3오류 발생 지점
$node
> require('fs').readFileSync('file.txt', 'utf8')
'one\ntwo\nthree\n'
// 문서 끝에 빈문자열을 제거한다.
13     else cb(null, src.trim().split('\n').length)수정 후 다시 실행
테스트 성공. 하지만 아무런 메세지가 없다.
$node test.js
$$echo $? // exit code. 0일 경우 성공. 1일 경우 실패
0assert의 문제점
- exception 이 발생할 경우 실행을 멈춤. 
- 테스트 블록이 실행되지 않을 경우에도 성공한 것처럼 보여짐. - (13번째 줄 제거 후 성공으로 처리되는 문제) 
Last updated
Was this helpful?
