FrameWork/Jest

Jest - create( ) - node-mock-http

Surge100 2023. 3. 6. 16:45

product.create( )

아직 저장할 Product 데이터를 넣어 주지 않았기 때문에 실제로 db에 저장할 data를 넣어준다.

 

몽구스 모델을 이용한 데이터 저장

const product = require('../models/Product');

//product.create();
product.create(req.body);

 

위와 같이 req 객체를 이용해서 요청에 들어온 body를 create메소드에 인자로 넣어줘서 데이터베이스에 저장해준다. 그렇기 때문에 단위 테스트에서도 req객체가 필요하다 그렇다면 어떻게 이 req객테를 단위테스트에서 이용할까?

 

node-mock-http 모듈이용

const httpModcks = require("node-mocks-http");

let req = httpMocks.createRequest();
let res = httpMocks.createResponse();

node-mock-http 모듈을 이용해서 expressJS 애플리케이션 라우팅 함수를 테스트하기 위한 http객체(request,response)를 얻는다. 

 

const mockProduct = require("../data/mock-product.json");

req.body = mockProduct;
productController.createProduct(req,res,next);

req객체를 얻었다면 req.body안에다가 저장해줄   product를 넣어준다.

 

const mockProduct = require("../data/mock-product.json");

req.body = mockProduct;
productController.createProduct(req,res,next);
expect(Product.create).toBeCalledWith(mockProduct);

expect와 matcher를 통해서 데이터베이스에 넣을 data가 되는 부분 코드를 테스트 해본다.

 

[출처 -

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]