TDD(1) 시작하기
테스트 주도 개발 TDD
Test Driven Development
노드에서는 mocha, should, superTest 등의 라이브러리를 사용해서 TDD를 할 수 있다.
Mocha
TDD를 할 수 있는 대표적인 자바스크립트 프레임워크로 테스트코드를 실행하는 테스트 러너(test runner)
- 설치:
npm i mocha --save-dev
- 테스트 수트: 테스트 환경으로 모카에서는 describe()로 구현한다.
- 테스트 케이스: 실제 테스트를 말하며 모카에서는 it()으로 구현한다.
- 테스트 실행:
node_modules/.bin/mocha utils.spec.js
#1 노드에서 제공하는 assert
모듈을 사용해서 capitalize와 add 함수가 동작하는지 확인하는 테스트 코드를 작성해보자.
assert.equal(actual, expected[, message])
== operator
로 두 값을 비교하며, 두 값이 모두NaN
인 경우 일치하는 것으로 간주한다.- 따라서
assert.strictEqual()
사용을 권장한다.- `=== operator'로 두 값을 비교
- optional한 message 값은 두 값이 일치하지 않을때
AssertionError
가 발생하는데, 이때 message 프로퍼티로 사용된다. 이 값을 명시하지 않은 경우 기본 에러 메시지가 사용된다. message가 에러 객체인 경우AssertionError
를 대체해 사용된다.
//utils.js 사용할 함수를 저장한 모듈
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
function add(num1, num2) {
return num1+num2;
}
module.exports = {
capitalize,
add
}
//utils.spec.js (테스트 코드는 .spec.js로 네이밍)
const utils = require("./utils");
const assert = require("assert");
describe("utils.js 모듈의 capitalize 함수는", function () {
it("문자열의 첫번째 문자를 대문자로 변환한다.", function () {
const result = utils.capitalize("hello");
assert.equal(result, "Hello");
});
});
describe("utils.js 모듈의 add 함수는", function (){
it("두 값을 더한다.", function (){
const result = utils.add(10, 20);
assert.equal(result, 30);
});
});
#2 서드파티 모듈 should를 사용해서 테스트 코드를 작성해보자
npm i mocha --save-dev
로 설치하기- 노드에서 제공하는
assert
모듈을 가져와서 사용했던 것과 다르게should
는 여러가지assertion
함수를 지원하므로 따로 모듈을 불러오지 않아도 된다.
const should = require("should");
describe("utils.js 모듈의 capitalize 함수는", function () {
it("문자열의 첫번째 문자를 대문자로 변환한다.", function (){
const result = utils.capitalize("hello");
result.should.be.eqaul("Hello");
});
});
#3 익스프레스 통합 테스트용 라이브러리인 SuperTest를 사용해서 통합 테스트 코드(API 기능 테스트)를 작성해보자
npm i supertest --save-dev
로 설치하기supertest
모듈을 변수request
에 저장하고, 생성한 서버app
을request
에 인자로 전달한다.- 비동기 요청을 보내는 경우에는 done을 it의 콜백에 전달하고, 테스트 케이스를 마친 후에 done을 실행시키도록 한다.
const should = require("should");
const request = require("supertest");
const app = require("../../index");
const models = require("../../models");
describe("GET /users", () => {
describe("성공시", () => {
it("유저 객체를 담은 배열을 반환한다", (done) => {
request(app).get("/users").end((err, res) => {
res.body.should.be.instanceOf(Array);
done();
});
});
});
})
Author And Source
이 문제에 관하여(TDD(1) 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kaitlin_k/TDD저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)