[TDD] create 단위테스트

김진수·2021년 9월 16일
0

TDD

목록 보기
3/4
post-thumbnail

Create Product

  1. 해야 할 일은 ??
    먼저 할 일은 데이터 베이스에 Product를 저장하는 것입니다. 그 중에서 Product를 저장하기 위한 함수를 먼저 생성합니다.

  2. 단위 테스트 작성

  1. 테스트에 대응하는 실제코드 작성

Create Method

  1. 해야 할 일은?
    createProduct 함수를 호출할 때 Product Model의 Create 메소드가 호출 되는지 확인 하기

  2. 단위 테스트 작성
    productmodel.create는 실제 데이터베이스에 데이터를 저장하는 부분이기 때문에 테스트 할 때는 jest.fn()을 통해 선언해줍니다.

  3. 테스트에 대응하는 실제 코드 작성

node-mocks-http

  1. 해야 할 일은?
    Product.create()에 아직 저장할 Product데이터를 넣어 주지 않았습니다. 그래서 이제 데이터베이스에 저장할 데이터를 넣어주겠습니다.

  2. 단위 테스트 작성
    원래 mongoose를 이용해서 데이터를 저장할 때는
    Product.create() ===> Product.create(req.body)
    이런 식으로 req 객체를 이용해서 요청에 함께 들어온 body를 create메소드에 인자로 넣어줘서 데이터베이스에 저장합니다.
    그렇기에 req 객체가 필요합니다.
    단위테스트에서 req, res객체를 얻으려면?

    node-mocks-http 모듈 이용!!!!

req 객체를 얻었으면
req.body내에 저장해줄 Product를 넣어줘야 합니다

  1. 테스트에 대응하는 실제 코드 작성

Before Each

test 마다 공통적으로 동작해야 하는 코드들이 있습니다. 그러한 코드들을 before each문에 넣어주면 test시작하기 전에 동작하게 됩니다. 그리고 코드 중복성과 가독성을 줄일 수 있습니다.

해당 코드는 req, res, next는 하나의 테스트에만 사용되는 것이 아닌 다른 테스트에서도 사용될 수 있으므로 beforeEach문에 넣어서 선언되는 것을 볼 수 있습니다.

상태값 및 결과값 전달

create가 정상적으로 되면 201 상태코드가 반환됩니다. 해당 상태값이 정상적으로 전달되는 지 확인 즉, 테스트 해봐야 합니다.

product.test.js

controller/product.js

res.status(201)코드가 정상적으로 동작하는지 보려면 product.test.js에서 보시는 바와 같이 productController.createProduct(req, res, next)를 통해 함수를 실행하고 expect를 통해 statusCode가 정상적으로 201인지 확인합니다. 이제 상태를 확인했으니 결과값을 확인해보겠습니다

controller/product.js 에서 보시는 바와 같이productModel.create(req.body)를 통해 데이터를 생성하고 해당 데이터를 createProduct를 저장합니다. 해당 데이터를 res.json(createProduct)를 통해 response(응답)해줍니다. 이제 이 과정을 테스트하려면 productController.createProduct(req, res, next)함수를 실행하고 res내의 json 응답객체가 있는지 확인하면 됩니다. 해당 코드가 expect(res._isEndCalled).toBeTruthy()});입니다.

create 단위 테스트 전체 코드

profile
백엔드 개발자

0개의 댓글