mocha 기본 사용법

getting started

// test를 원하는 폴더에서 아래와 같이 terminal
$ npm install mocha
$ mkdir test
$ code test/test.js // vscode 실행해주는 것

in my editor:

// step4 코드들을 테스트한다고 가정했을 때의 예시
const assert = require('assert');
const step4 = require('../step4.js');
const customMath = require('../customMath.js')

describe('step4.adders', () => {
  describe('half Adder', () => {
    it('should add bit and return [carry, sum]', () => {
      assert.deepEqual(step4.halfAdder(0, 0), [false, false]);
      assert.deepEqual(step4.halfAdder(0, 1), [false, true]);
      assert.deepEqual(step4.halfAdder(1, 0), [false, true]);
      assert.deepEqual(step4.halfAdder(1, 1), [true, false]);
    });
  });
})
// assert.equal로는 array의 주소가 달라 틀리다고 나오므로 deepEqual을 써줘야한다.


describe('customMath', () => {
  describe('pow', () => {
    it('should equal to Math.pow', () => {
      assert.equal(customMath.pow(2, 3), 8);
      assert.equal(customMath.pow(4, 3), 64);
    })
  })
})

back in terminal:

$ ./node_modules/mocha/bin/mocha

  step4.adders
    half Adder
      ✓ should add bit and return [carry, sum]

  customMath
    pow
      ✓ should equal to Math.pow


  2 passing (9ms)

set up a test script in package.json:

"scripts": {
  "test": "mocha"
}

Then run tests with:

$ npm test

아니면 json파일 수정은 생략하고 아래와 같이 실행해주면 된다.

$ mocha test/test.js

참고

package-lock.json

package-lock.json이란? 필요한 이유는?

  • package-lock.json은 npm을 사용하여 package.json 파일을 또는 node_modules 트리를 수정하면 자동으로 생성되는 파일이다. package-lock.json은 꼭 필요하다고 하는데 왜일까?
  • package.json 파일의 의존성 선언에는 version range가 사용되는데, 이는 특정 버전이 아니라 버전의 범위를 의미한다. 예를들면 npm i express를 실행하게 되면 package.json 파일에는 “^4.16.3”(Caret Ranges)로 버전 범위가 추가된다. 이 package.json를 기반으로 npm i을 실행하면 4.16.3 버전이 설치된다. 그런데, 새로 express의 마이너 패치가 이루어진 버전이 퍼블리시 된다면 동일한 package.json파일로 설치해도 4.16.4, 이나 4.17.1 등 다른 버전이 설치될 수 있는 것이다. 그리고 이런 간혹 업데이트된 버전은 오류를 발생시키는 경우가 있다.
  • 따라서 안정성을 위해 package-lock.json은 매우 중요하다

참고

package.json 만들기

creating a new package.json file

  1. running a CLI

    $cd /path/to/package
    $npm init
  2. answer the questions in the command line questionnaire.

참고