이전 글에서 TDD 에 대해 알아본 내용을 바탕으로 테스트 주도 개발을 해보자!!!
TDD 란
TTD 는 Test Driven Development 의 약자로 테스트 주도 개발을 말한다. 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현하는 방식으로 개발을 진행한다. TDD
threezerosin.tistory.com
사용 기술
- Express
- Jest
1. Red → Green → Blue 순으로 개발을 진행합니다.
2. 제품 데이터를 Create 하는 기능을 개발합니다.
Red : ProductController 클래스의 createProduct 기능을 설계
- createProduct 메소드는 함수여야 한다.
- 해당 메서드는 productModel.create를 호출 해야한다.
//product.controller.js
import productModel from "../models/Product";
export class ProductController {
}
//product.controller.js
import {ProductController} from "../../controller/product.controller";
import productModel from "../../models/Product";
describe('Product Controlller Create', () => {
let controller;
beforeEach(() => {
controller = new ProductController();
//
productModel.create = jest.fn();
});
//it 대신 test 도 가능
it("createProduct 는 function", () => {
expect(typeof controller.createProduct).toBe("function");
})
it('should call productModel.create', () => {
controller.createProduct();
expect(productModel.create).toBeCalled();
})
})
위 테스트 코드를 실행해보면 createProduct 메서드가 존재하지 않기 때문에 결과는 Fail.
productModel.create 는 DB에 접근하여 데이터를 다루기 떄문에 이와 같은 경우에서는 jest의 fn() 메서드를 이용하여 모킹해주었다. Jest의 Mock Function에 대해서는 다른 글에서 좀 더 자세히 다루어 보겠습니다.
Green : 테스트를 통과할 수 있도록 코드를 작성
- createProduct 비즈니스 로직을 구현
import productModel from "../models/Product";
export class ProductController {
createProduct = async () => {
await productModel.create();
}
}
작성한 코드가 테스트를 통과한 것을 확인할 수 있습니다.
Blue
단계는 코드가 단순하여 따로 진행할 필요가 없어 PASS
추가
jest 에서 import/ export (es6) 를 사용하기 위해서는 babel 라이브러리가 필요합니다.
babel 없이 import 구문을 사용할 경우에는 아래와 같은 에러가 발생하게 됩니다.
Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node\_modules" folder is ignored by transformers.
이를 해결하기 위해서는
npm i --save-dev babel-jest @babel/core @babel/preset-env
- 프로젝트 루트에 babel.config.js를 생성한 후 아래내용을 입력해주면 사용가능합니다.
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
'TDD' 카테고리의 다른 글
Jest - intelliJ[Window] 설정하기 (0) | 2024.03.20 |
---|---|
TDD 해보기 (2)_Mocking 이란 (0) | 2024.02.06 |
Jest 란 (0) | 2024.02.05 |
TDD 란 (0) | 2024.02.05 |