-
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하고 있기때문에 호출 여부를 알 수 있다.
[출처 -
'FrameWork > Jest' 카테고리의 다른 글
Jest - Module Function2 (mock implementations, mock Name) (0) 2023.03.09 Jest - Mock Function1 (모듈 mocking jest.fn( ), jest.mock( )) (0) 2023.03.09 Jest - beforeEach (0) 2023.03.06 Jest - create( ) - node-mock-http (0) 2023.03.06 단위 테스트(Unit Test)에 대하여 (0) 2023.03.06