node.js Test
Mocha는 Node.js에서 사용하는 JavaScript 테스트 프레임웍으로 쉽게 테스트 코드를 작성할 수 있으며, 비동기 테스트가 가능하다. Assertion모듈은 포함되어있지 않아, node에서 제공하는
assert
를 사용하거나Chai
와 같은 라이브러리를 사용할 수 있다. BDD, TDD 등의 인터페이스를 제공하고 있다.
설치
# js
npm install --save-dev mocha
# ts
npm install --save-dev mocha @types/mocha
BDD 스키마
describe('userService', function () {
describe('#createUser', function () {
it('correct request', function (done) {
//...
done();
});
it('incorrect request', function (done) {
//...
done();
});
})
describe('#findAllUser', function () {
it('correct request', function () {
//...
});
it('incorrect request', function () {
//...
});
});
});
/*
userService
#createUser
√ correct request
√ incorrect request
#findAllUser
√ correct request
√ incorrect request
*/
- describe: test suite로 여러 test case를 묶어놓은 집합이라 할 수 있다.
- context: describe의 alias이다.
- it: 하나의 test case이다. done parmeter를 통해서 비동기 함수에 대해서도 테스트 가능하다.
// HOOKS
before(function() {
// 블록 안에서 가장 처음 한번 실행된다.
});
after(function() {
// 블록 안에서 가장 나중에 한번 실행된다.
});
beforeEach(function() {
// 블록 안에서 테스트마다 먼저 실행된다.
});
afterEach(function() {
// 블록 안에서 테스트마다 나중에 실행된다.
});
따라해보기
디렉토리 구조 예시
├─node_modules
├─src
│ ├─graphql
│ ├─handler
│ ├─model
│ ├─repository
│ ├─schema
│ └─service
└─test
└─repository
Test 기본 설정
// package.json
{
//...
"scripts": {
"test": "mocha --require ts-node/register test/**/*.test.ts",
}
//...
}
Test 작성 예시
// report-repository.test.ts
import {expect} from "chai";
import {reportRepository} from "../../src/repository/report-repository"
import * as mongodb from "../../src/handler/mongodb";
describe("ReportRepository", () => {
before(async () => {
await mongodb.init().tryConnect();
})
it('findAllReportByCommandId', () => {
/* GIVEN */
const commandId: string = '60495ee4d4e35632f20579b6';
/* WHEN */
reportRepository.findAllReportByCommandId(commandId)
.then((reports) => {
/* THEN */
expect(reports.length).to.be.greaterThan(0);
});
});
it('findAllReportByParentId', () => {
/* GIVEN */
const parentId: string = '60495ee4d4e35632f20579b6';
/* WHEN */
reportRepository.findAllReportByParentId(parentId)
.then((reports) => {
/* THEN */
expect(reports.length).to.be.greaterThan(0);
});
});
})
Leave a comment