반응형
단위 테스트가 독립적이어야 하는 이유
의존적인 부분을 구현하기가 까다로운 경우가 있고, 의존적인 부분의 상태에 따라서
테스트 하는 부분의 결과에 영향을 받을 수 있다.
그래서 단위 테스트는 특정기능만 분리해서 독립적으로 사용하며, just.fn()으로 이것을 해결할 수 있다.
jest.fn()
Mock 함수를 생성하는 함수이다.
Mock 함수는 단위테스트를 작성할 때, 해당 코드가 의존하는 부분을 가짜로 대체하는 일을 해준다.
const mockFunction = jest.fn(); // Mock(가짜)함수 생성
mockFunction(); // 가짜 함수 호출
mockFunction('hello');
mockFunction.mockReturnValue('가짜함수 반환') // mockReturnValue 메소드를 이용해 반환 값 정해주기
// 가짜 함수가 몇 번 호출되었고 어떤 인자가 넘어 왔는지 검증
expect(mockFunction).toBeCalledWith('hello');
expect(mockFunction).toBeCalledTimes(2);
단위 테스트 create 순서
1. 해야 할 일 파악
데이터 베이스에 상품을 저장한다고 가정 한다. 그 중 상품을 저장하기 위한 함수를 생성한다.
2. 단위 테스트 작성 (test/unit/product.test.js)
const productController = require("../../controller/products");
const productModel = require("../../models/Product");
productModel.create = jest.fn(); // 실제 create시킬 것이 아니기 때문에 이것으로 감시
describe("Product Controller Create", () => {
it("should have a createProduct function", () => {
expect(typeof productController.createProduct).toBe("function");
});
it("should call ProductModel.create", () => {
productController.createProduct(); // createProduct 가 호출 될 때
expect(productModel.create).toBeCalled(); // 이 메소드가 실행되는지 체크
});
});
3. 테스트에 대응하는 실제 코드 작성 (controller/product.js)
const productModel = require("../models/Product");
exports.createProduct = () => {
productModel.create();
};
반응형
'Node.js > TDD' 카테고리의 다른 글
통합 테스트(Intergration Test) (0) | 2023.03.01 |
---|---|
node-mocks-http, beforeEach (0) | 2023.02.23 |
TDD ( Test Driven Development ) (0) | 2023.02.21 |