jest, supertest 모듈 설치
npm i jest supertest -D
Jest의 경우 jest.config.js 파일을 정의하거나, CLI 환경에서 추가적인 옵션을 설정하여 커버리지를 출력하거나, 실시간 모니터링 등 다양한 기능을 사용할 수 있습니다.
jest.config.js
파일 만들기특정 경로의 테스트 파일을 무시하고, 모든 Test Case (expect)의 결과값 출력을 설정
// jest.config.js
module.exports = {
// 해당 패턴에 일치하는 경로가 존재할 경우 테스트를 하지 않고 넘어갑니다.
"testPathIgnorePatterns": ["/node_modules/"],
// 테스트 실행 시 각 TestCase에 대한 출력을 해줍니다.
verbose: true,
}
Jest CLI는 여러분들이 테스트 코드를 검사할 때 추가적인 옵션을 설정하여 원하는 결과값을 도출할 수 있도록 만들어줍니다. 예를 들어서 테스트 코드의 실시간 모니터링을 진행하거나, 결과값을 별도의 파일로 생성하거나, 테스트 코드의 커버리지를 확인하는 등 다양한 옵션을 설정할 수 있습니다.
// set NODE_ENV=test를 앞에 넣어주면 정확하게 지시됨.
// set NODE_ENV=test jest --forceExit 같이
"test": "jest --forceExit",
"test:silent": "jest --silent --forceExit",
"test:coverage": "jest --coverage --forceExit",
"test:unit": "jest __tests__/unit --forceExit",
"test:integration": "jest __tests__/integration --forceExit"
--forceExit
app
객체와 Sequelize 연결이 Connect
상태로 남아있어 테스트 코드가 종료되지 않을 때 사용합니다.--silent
console.log
와 같은 메시지를 출력하지 않습니다.--coverage
테스트 코드 검사가 완료된 후 현재 프로젝트의 테스트 코드 커버리지를 출력해줍니다.
--coverage
옵션 이미지
**--coverage
설정을 하지 않은 경우****--coverage
설정을 한 경우**--verbose
테스트 코드의 개별 테스트 결과를 표시해줍니다.
--verbose
옵션 이미지
**--verbose
옵션 설정을 하지 않은 경우****--verbose
옵션 설정을 한 경우**test()
를 기준으로 결과값이 출력됩니다.expect 결과값 검증하기
**.toBe(value)**
.toEqual(value)
.toMatch(regexp | string)
.toBeTruthy()
True
인지 검증합니다..toBeInstanceOf(Class)
.toHaveProperty(keyPath, value?)
.toMatchObject(object)
Global Jest 문법
**afterAll(fn, timeout)**
test()
가 완료된 이후에 수행됩니다.**afterEach(fn, timeout)**
test()
가 완료된 이후에 수행됩니다.**beforeAll(fn, timeout)**
**beforeEach(fn, timeout)**
test()
가 실행되기 전에 수행됩니다.Mock이란 특정 Method를 Mocking하기 위해 사용됩니다.
즉, 테스트에서 시간 또는 비용이 많이들거나 의존성이 있는 코드를 실제로 실행하지 않고 호출 여부, 입력한 값의 일치 여부와 같은 정보를 확인하기 위해 사용하는 가짜 객체입니다.
테스트를 하기 위해 매번 DB에 접근하여 데이터를 수정하거나, SMS 전송과 같은 비용이 발생하는 작업을 반복할 수 없습니다.
코드를 실행했을 때 문제가 발생하거나 로직을 검사하는데 방해가 되는 코드를 실제로 실행한 것 처럼 변경하기 위해서 저희는 Mock이라는 가짜 객체를 사용
만약 Repository가 사용하는 DB를 Mocking하게 되었을 경우 실제 DB에 접근하지 않고도 특정한 값이 입력되었을 때 어떤 결과가 나오는지 임의로 설정하여 DB에 접근했을 때와 동일한 상황을 예상하여 코드를 작성할 수 있게 됩니다.
또한 Mock된 객체의 특정한 Method가 몇번 호출되었는지, 어떤 값을 전달받았는지, 전달받은 데이터의 형식은 내가 생각한것이 맞는지 등 다양한 조건을 검사할 수 있습니다.