Mocha 공식 홈페이지 메인에 있는 Mocha에 대한 설명이다.
Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases.
Mocha 설치
npm i -D mocha
import 구문을 사용하기 위해서는 @babel/core, @babel/preset-env, @babel/register 설치가 필요하다.
npm i -D @babel/core @babel/preset-env @babel/register
.babelrc
{
"presets": ["@babel/preset-env"]
}
package.json
"scripts": {
"test": "mocha --require @babel/register --recursive"
}
구현하고자 하는 기능에 대한 설명이 들어간다. 우리 예시에선 함수 pow가 어떤 동작을 하는지에 대한 설명이 들어갈 것이다. it 블록을 한데 모아주는 역할도 한다.
it의 첫 번째 인수엔 특정 유스 케이스에 대한 설명이 들어간다. 이 설명은 누구나 읽을 수 있고 이해할 수 있는 자연어로 적어준다. 두 번째 인수엔 유스 케이스 테스트 함수가 들어간다.
기능을 제대로 구현했다면 it 블록 내의 코드 assert.equal(value1, value2)이 에러 없이 실행된다.
index.js
export const findUserAge = () => {
//실패 케이스를 위해 아무것도 없는 상태로 시작
};
import { findUserAge } from '../index';
let assert = require('assert');
describe('findUserAge', function () {
let users = [
{ userName: 'ehdna1234', age: 20, gender: 'male' },
{ userName: 'Lee1234', age: 28, gender: 'female' },
{ userName: 'Jane123', age: 30, gender: 'female' },
{ userName: 'Tom000', age: 15, gender: 'male' },
];
it("should return 존재하지 않는 유저입니다. when the userName doesn't exist", function () {
assert.equal(findUserAge(users, 'ehdna'), '존재하지 않는 유저입니다.');
});
it('should return 30 when the userName is Jane123', function () {
assert.equal(findUserAge(users, 'Jane123'), 30);
});
it('should return 15 when the userName is Tom000', function () {
assert.equal(findUserAge(users, 'Tom000'), 15);
});
});
테스트 실행
npm run test
index.js
export const findUserAge = (users, userName) => {
let age = "존재하지 않는 유저입니다.";
users.forEach(user => {
if (user.userName === userName) {
age = user.age;
}
});
return age;
};
import { findUserAge } from '../index';
let assert = require('assert');
describe('findUserAge', function () {
let users = [
{ userName: 'ehdna1234', age: 20, gender: 'male' },
{ userName: 'Lee1234', age: 28, gender: 'female' },
{ userName: 'Jane123', age: 30, gender: 'female' },
{ userName: 'Tom000', age: 15, gender: 'male' },
];
it("should return 존재하지 않는 유저입니다. when the userName doesn't exist", function () {
assert.equal(findUserAge(users, 'ehdna'), '존재하지 않는 유저입니다.');
});
it('should return 30 when the userName is Jane123', function () {
assert.equal(findUserAge(users, 'Jane123'), 30);
});
it('should return 15 when the userName is Tom000', function () {
assert.equal(findUserAge(users, 'Tom000'), 15);
});
});
테스트 실행
npm run test
index.js
export const findUserAge = (users, userName) => {
return users.reduce((userAge, user) => {
return user.userName === userName ? userAge = user.age : userAge;
}, '존재하지 않는 유저입니다.');
};
테스트 실행
npm run test
Chai 공식 페이지에 있는 Chai에 대한 설명이다.
Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework.
Chai는 다양한 assertion을 제공해주는 라이브러리이다.
Chai is an assertion library, similar to Node's built-in assert. It makes testing much easier by giving you lots of assertions you can run against your code.
npm i -D chai
import chai from 'chai';
import { findUserAge } from '../index';
let assert = chai.assert;
describe('findUserAge', function () {
let users = [
{ userName: 'ehdna1234', age: 20, gender: 'male' },
{ userName: 'Lee1234', age: 28, gender: 'female' },
{ userName: 'Jane123', age: 30, gender: 'female' },
{ userName: 'Tom000', age: 15, gender: 'male' },
];
it("should return 존재하지 않는 유저입니다. when the userName doesn't exist", function () {
assert.equal(findUserAge(users, 'ehdna'), '존재하지 않는 유저입니다.');
});
it('should return 30 when the userName is Jane123', function () {
assert.equal(findUserAge(users, 'Jane123'), 30);
});
it('should return 15 when the userName is Tom000', function () {
assert.equal(findUserAge(users, 'Tom000'), 15);
});
});
테스트 실행
npm run test