Express로 새로운 서비스를 작업하던 중, test를 작성해보기로 했다.
routes, controllers, services, models 로 나눠진 계층 구조에서 service만 먼저 테스트하려 한다.
- 환경 설정
- 모듈 설치
npm install -D jest @types/jest ts-jest jest-mock
- jest: 단위 테스트 프레임워크
- @types/jest: jest types
- ts-jest: jest의 ts 모듈
- jest-mock: 모킹한 모듈 타입 캐스팅을 간편히 해줌
- package.json에 jest 설정을 해준다.
"jest": {
"transform": {
"^.+\\.ts$": "ts-jest"
},
"testRegex": "\\.test\\.ts$",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"globals": {
"ts-jest": {
"diagnostics": true
}
}
}
를 추가하고
scripts에
"test": "jest --detectOpenHandles --forceExit"
을 추가하면 된다.
1. src 폴더와 같은 계층에 test 폴더를 생성한다.
- routes 테스트면 routes 하위에 test 폴더를 만드는 것도 같은데... 보편적인 방법이 뭔지는 잘 모르겠다. 취향 것 하면 될 듯
2. test/servie/TempService.test.ts 를 생성한다.
- 원하는 파일 명으로 생성하되, .test.ts 로만 끝나면 된다.
3. 코드를 작성한다. 아래는 create 의 기능을 하는 함수를 테스트하였다.
import { jest } from "@jest/globals";
import { mocked } from "jest-mock"; //1
import { TempService } from "../../src/services"; //2
jest.mock("../../src/services"); //1
const mockTempService = mocked(TempService); //1
describe("< TempService >", () => {
var req = "TempService";
var res = {
TempService1: expect["number"], //3
TempService2: "TempService2",
createdAt: expect.anything(), //4
updatedAt: expect.anything(),
};
test("TempService, success 응답", async () => {
mockTempService.create.mockResolvedValue(res); //5
var data = await mockTempService.create(req); //5
expect(data).toBe(res);
});
});
- 타입스크립트에서는 jest.mock()로 모듈을 모킹하여도 타입 캐스팅이 일어나지 않는다. 그래서 원래의 타입으로 판단하고 mockResolvedValue가 없다고 에러를 뱉는다.
타입 캐스팅을 직접 진행해주어도 되고, 나처럼 jest-mock 모듈로 편하게 해도 된다. - index.ts에서 테스트할 모듈을 가져온다
- number 타입인지만 확인하겠다는 뜻
- 생성, 수정 시간은 그냥 anything으로 했는데 타입을 직접 찾아서 3번처럼 지정해줘도 좋다.
- 실제 테스트 코드
참고
https://yonghyunlee.gitlab.io/temp_post/jest/
테스트 코드 작성하기 - jest, typescript - 김땡땡's blog
jest javascript 테스트 코드를 작성하도록 해주는 프레임워크는 Mocha, Chai, Jest 등이 있는데 간단한 테스트를 만드는데에 좋다고 하는 Jest를 사용해보자. 설치 npm install --save-dev jest 설정 테스트할 파
yonghyunlee.gitlab.io
https://rutgo-letsgo.tistory.com/289
TypeScript를 이용해 Jest 테스트를 진행해보자.
TypeScript를 이용해 Jest 테스트를 진행해보자. 서론 간단한 node 빈 프로젝트가 있다고 합시다. (package.json만 있는 프로젝트) Jest는 TypeScript를 지원하는 단위 테스트 도구이기 떄문에 사용하기 좋습
rutgo-letsgo.tistory.com
https://lgphone.tistory.com/100
Node.js - Jest 를 이용한 테스팅 (Testing using Jest)
Jest 서비스를 개발 완료한 후, 개발자나 QA들은 자신이 만든 서비스가 제대로 동작하는지 테스트해본다. 그러나 기능이 많다면 일일이 수작업으로 테스트하기엔 작업량이 너무 많을 수 있다. 이
lgphone.tistory.com
[Node] Express + Typescript에서 Jest로 테스트하기 - 모킹
Jest 라이브러리 정리 - Mock Functions
velog.io
'Express' 카테고리의 다른 글
[Jest] Typescript + Express + Jest로 Controller 테스트하기 - Mock, Sequelize (0) | 2023.05.22 |
---|---|
[Node js] JSON.parse(JSON.stringify()) 시 빈 문자열("")을 반환하는 문제 (0) | 2022.08.16 |