Express

[Jest] Typescript + Express + Jest로 Service 테스트하기 - Mock, Sequelize

폭풍저그김탁구 2023. 5. 22. 16:34

 

Express로 새로운 서비스를 작업하던 중, test를 작성해보기로 했다.

routes, controllers, services, models 로 나눠진 계층 구조에서 service만 먼저 테스트하려 한다.

 

 


 

  1. 환경 설정
  • 모듈 설치
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);
  });
});
  1. 타입스크립트에서는 jest.mock()로 모듈을 모킹하여도 타입 캐스팅이 일어나지 않는다. 그래서 원래의 타입으로 판단하고 mockResolvedValue가 없다고 에러를 뱉는다.
    타입 캐스팅을 직접 진행해주어도 되고, 나처럼 jest-mock 모듈로 편하게 해도 된다.
  2. index.ts에서 테스트할 모듈을 가져온다
  3. number 타입인지만 확인하겠다는 뜻
  4. 생성, 수정 시간은 그냥 anything으로 했는데 타입을 직접 찾아서 3번처럼 지정해줘도 좋다.
  5. 실제 테스트 코드

 

 

 


 

 

참고

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

https://velog.io/@tkppp-dev/Node-Express-Typescript%EC%97%90%EC%84%9C-Jest%EB%A1%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0-%EB%AA%A8%ED%82%B9

 

[Node] Express + Typescript에서 Jest로 테스트하기 - 모킹

Jest 라이브러리 정리 - Mock Functions

velog.io