Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jest 테스팅 속도를 향상하라 #105

Merged
merged 4 commits into from
Dec 18, 2023
Merged

Jest 테스팅 속도를 향상하라 #105

merged 4 commits into from
Dec 18, 2023

Conversation

jihwooon
Copy link
Owner

@jihwooon jihwooon commented Dec 18, 2023

문제

Jest 기본 테스팅 속도 시간 평균 5초 정도가 걸립니다. 테스팅 속도는 느리지 않지만 Jest 기본 테스팅이 다른 라이브러리보다 늦은 감이 있습니다. 컴파일 속도를 향상이 필요합니다.

Test Suites: 34 passed, 34 total
Tests:       156 passed, 156 total
Snapshots:   0 total
Time:        5.632 s

예시

jest.config.js파일에는 ts-jest 설정으로 두고 있습니다.

module.exports = {
 // ...
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
 // ...
}
  1. bash에 테스트 명령어를 입력합니다.
npm test
  1. 테스트 평균 속도가 5초 정도에서 끝납니다.
Test Suites: 34 passed, 34 total
Tests:       156 passed, 156 total
Snapshots:   0 total
Time:        4.868 s, estimated 6 s

답변

Swc는 Rust 기반인 고속 컴파일러로 변경합니다. swc에서 swc/Jest 라이브러리를 따로 제공해줍니다
컴파일러를 추가해서 빌드 속도를 향상 할 수 있습니다.

그렇지만 Nest.js에서는 swc/Jest를 사용하기 위해서는 .swcrc파일을 설정해야 합니다.

{
    "jsc": {
      "parser": {
        "syntax": "typescript",
        "tsx": false,
        "decorators": true
      },
      "transform": {
        "legacyDecorator": true,
        "decoratorMetadata": true
      },
      "target": "es2018"
    },
    "module": {
      "type": "commonjs",
      "noInterop": true
    }
  }

이는 Nest.js 에 데코레이터 기반 파일들을 Module이 불러오지 못하는 에러가 발생하기 때문입니다.
swc에서도 이 문제를 인지하고 swc-project/swc#1362 Nest.js에 사용하기 위한 .swcrc 설정 방법을 제시합니다.

설정이 완료가 되고 npm run test 명령어를 입력합니다.

Test Suites: 34 passed, 34 total
Tests:       156 passed, 156 total
Snapshots:   0 total
Time:        2.149 s

이전 테스트 속도보다 3초 이상 단축 되었습니다.

참고사항

swc는 rust 기반 컴파일러입니다. swc에서 제공해주는 jest를 사용해서 jest
속도 향상을 시키기 위해 라이브러를 사용합니다.

seeAlso:
- https://swc.rs/
- https://www.npmjs.com/package/@swc/jest
jestConfig 파일에 swc/jest를 사용 할 수 있도록 기존 ts-jest를 swc/jest로
수정했습니다
esModuleInterop은 commonJS 모듈 방식에서 ESModule로 사용하기 위한
설정입니다.

import * 형 변환이 아닌 ESModule 방식에 자동으로 변환시키기 위해서
추가했습니다.
@jihwooon jihwooon force-pushed the issue-69 branch 2 times, most recently from 936227c to 5d1f069 Compare December 18, 2023 07:11
Nest.js에는 swc전용 지원이 없어 swcrc 설정 파일을 따로 추가해야합니다.
swcrc 설정에 decorators 설정을 true 두고 decorators 메타 데이터와
레거시를 사용 할 수 있도록 true 설정해야 합니다.

seeAlso:
- https://github.com/DanielRamosAcosta/nest-class-validator-swc
- swc-project/swc#1362
@jihwooon jihwooon merged commit 123c4f5 into main Dec 18, 2023
1 check failed
@jihwooon jihwooon deleted the issue-69 branch December 18, 2023 07:13
@jihwooon jihwooon linked an issue Dec 18, 2023 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Jest 테스팅 속도 향상하라
1 participant