Jest

Gisele·2021년 1월 8일
0

Jest란?

  • FaceBook이 만든 테스팅 프레임 워크
  • 최소한의 설정으로 동작하며 Test Case를 만들어서 어플리케이션 코드가 잘 돌아가는지 확인
  • 단위테스트를 위해 사용

Jest 사용 준비(with node.js)

  1. 설치
$ npm install jest --save-dev
  1. Test 스크립트 변경
    package.json
...
"scripts": {
    "test": "jest"
  }
...
  1. 테스트 작성할 폴더 및 파일 기본 구조 생성
└ test
    └ unit
        └ xx.test.js
    └ intergration
  1. 테스트 코드 작성

Jest가 Test 파일을 찾는 방법

  • {filename}.test.js
  • {filename}.spec.js
  • test 폴더 내부

예시코드

  • 함수인지 확인
  • 함수를 호출하는지 확인
  • 상태값 확인
  • 결과값 확인
  • 에러처리
const { request } = require("express");

const productController = require('../../controller/products')
const productModel = require('../../models/Product')
const httpMocks = require('node-mocks-http')
const newProduct = require('../data/new-product.json')
const allProducts = require('../data/all-products.json')

productModel.create = jest.fn(); //mock함수생성 -- 의존성 x
// product create 예시
describe("Product Controller Get",()=>{
    it('should have a getProducts function',()=>{
        expect(typeof productController.getProducts).toBe('function')
    })

    it('should call ProductModel.find({})',async()=>{
        await productController.getProducts(req,res,next);
        expect(productModel.find).toHaveBeenCalledWith({})
    })

    it('should return 200 response',async()=>{
        await productController.getProducts(req,res,next);
        expect(res.statusCode).toBe(200)
        expect(res._isEndCalled).toBeTruthy()
    })

    it('should return json body in response',async()=>{
        productModel.find.mockReturnValue(allProducts)
        await productController.getProducts(req,res,next);
        expect(res._getJSONData()).toStrictEqual(allProducts)
    })

    it("should handle errors",async()=>{
        const errorMessage = {message:"error finding product data"}
        const rejectedPromise = Promise.reject(errorMessage)
        productModel.find.mockReturnValue(rejectedPromise)
        await productController.getProducts(req,res,next);
        expect(next).toHaveBeenCalledWith(errorMessage)        
    })
})

📑 reference

profile
한약은 거들뿐

0개의 댓글