Jest

Jest는 방대한 생태계를 가진 일반적인 테스트 러너입니다. Turborepo와 통합하면 엄청난 속도 향상을 얻을 수 있습니다.

Good to know: 

This guide assumes you're using create-turbo or a repository with a similar structure.

설정

다음과 같은 monorepo가 있다고 가정해 봅시다:

package.json
package.json

테스트 스위트를 계획하는 패키지에 jest를 설치합니다. 이 예제에서는 web@repo/ui에 테스트가 있습니다:

Terminal
pnpm add jest --save-dev --filter=@repo/ui --filter=web

apps/webpackages/ui 모두 자체 테스트 스위트가 있으므로 package.jsontest 스크립트를 추가합니다:

./apps/web/package.json
{
  "name": "web",
  "scripts": {
    "test": "jest"
  },
  "devDependencies": {
    "jest": "latest"
  }
}

루트 turbo.json 내부에 test 작업을 만듭니다:

Turborepo logo
./turbo.json
{
  "tasks": {
    "test": {}
  }
}

이제 turbo test는 각 패키지의 모든 테스트 스위트를 병렬화하고 캐시하여 변경된 코드만 테스트합니다.

watch 모드에서 테스트 실행

테스트 스위트를 정상적으로 실행하면 완료되고 stdout에 출력됩니다. 즉, Turborepo로 캐시할 수 있습니다.

하지만 watch 모드에서 테스트를 실행하면 프로세스가 종료되지 않습니다. 이로 인해 watch 작업은 개발 작업과 더 비슷합니다.

이러한 차이로 인해 두 개의 별도 Turborepo 작업을 지정하는 것을 권장합니다: 하나는 테스트를 실행하는 것이고, 다른 하나는 Jest의 watch 모드에서 실행하는 것입니다. 각 워크스페이스의 각 package.json 파일 내부에:

./apps/web/package.json
{
  "name": "web",
  "scripts": {
    "test": "jest",
    "test:watch": "jest --watch"
  },
  "devDependencies": {
    "jest": "latest"
  }
}

루트 turbo.json 내부에:

Turborepo logo
./turbo.json
{
  "tasks": {
    "test": {},
    "test:watch": {
      "cache": false,
      "persistent": true
    }
  }
}

전역 turboturbo test:watch로 사용하거나 루트 package.json의 스크립트에서 이 작업을 실행할 수 있습니다:

Terminal
turbo test
Terminal
turbo test:watch