Node.js/TDD

단위 테스트 create

jjikky 2023. 2. 23. 16:45
반응형
단위 테스트가 독립적이어야 하는 이유

의존적인 부분을 구현하기가 까다로운 경우가 있고, 의존적인 부분의 상태에 따라서

테스트 하는 부분의 결과에 영향을 받을 수 있다. 

 

그래서 단위 테스트는 특정기능만 분리해서 독립적으로 사용하며, 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();
};

 

 

 

 

 

반응형