ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jest - TDD 개발 방식 순서
    FrameWork/Jest 2023. 3. 6. 15:39

     

    TDD 개발방식

    1. 해야할일 정의 

    2. 단위 테스트 작성 - 실제 코드 작성전에 test case를 작성한다.

    3. 테스트 코드에 대응하는 실제 코드작성 - test case가 성공(passed)될 수 있게 실제 코드를 작성한다.

     

    const productController = require("../../controller/products");
    
    describe("Product Controller Create", () => {
      it("should have a createProduct function", () => {
        expect(typeof productController.createProduct).toBe("function");
      });
    });

    product 인스턴스 data를 database에 저장하기 위해, 저장 동작을 하는 함수를 생성해야한다. 그렇기 때문에  제일 먼저 product 인스턴스를 database에 저장하는 함수가 존재 하는지 부터 test를 한다. 

     

    Product인스턴스 DB에 저장

    const productController = require("../../controller/products");
    const productModel = require("../../models/Product");
    
    productModel.create = jest.fn();
    
    describe("Product Controller Create", () => {
    
      it("should call ProductModel.create", () => {
        productController.createProduct();
        expect(productModel.create).toBeCalledWith();
      });
    
    });

     

    product 인스턴스 data를 database에 저장하는 createProduct 함수를 호출할때 Product Model의 Create메소드가 호출되는지 확인하해야한다. database에 data를 저장할 때는 Model(Product)의 create, delete 메소드 등을 이용해서 저장할 수 있다.

     

    즉 database에 product 인스턴스 data를 넣어 줄때는 Product model이 호출이 된다. 

     

    expect(productModel.create)이 되는 지 확인은 할때 지금 unit test를 해주고 있기 때문에 직접적으로 Model에 영향을 받으면 안된다. 진짜 작동하는 ProductModel.create는 database와 직접적으로 연결되는 메소드가 작동하는 것이기때문이다. 그러므로 이때 mock함수를 이용해준다. 

     

    productModel.create = jest.fn();

     jest.fn()을 사용해서 productModel.create 함수를 생성해주면, productModel.create 부분이 1)어떤 것에 의해서 호출이 되는지 그리고 2)어떤 것과 함께 호출이 되는지 알 수 가 있다. 

     

    그래서 productController.createProduct( )가 호출이 될때 productModel.create이 호출이 됐는지 안됐는지 그부분을 jest.fn으로 mock함수를 만들어 spy하고 있기때문에 호출 여부를 알 수 있다. 

     

     

    [출처 -

    https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-tdd/dashboard]

    댓글

Designed by Tistory.