集成 Jest

Jest 是一个拥有庞大生态系统的常用测试运行器。与 Turborepo 集成将带来巨大的速度提升。

Good to know: 

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

设置

假设我们有一个如下所示的单体仓库:

package.json
package.json

在你计划有测试套件的包中安装 jest。对于这个例子,我们将在 web@repo/ui 中有测试:

Terminal
npm install jest --workspace=web --workspace=@repo/ui --save-dev

apps/webpackages/ui 都有自己的测试套件,所以我们将在它们的 package.json 中添加一个 test 脚本:

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

在根目录的 turbo.json 中,创建一个 test 任务:

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

现在,turbo test 可以并行化并缓存每个包中的所有测试套件,只测试已更改的代码。

在监视模式下运行测试

当你正常运行测试套件时,它会完成并输出到 stdout。这意味着你可以用 Turborepo 缓存它

但当你在监视模式下运行测试时,进程永远不会退出。这使得监视任务更像是一个开发任务

因为这种差异,我们建议指定两个单独的 Turborepo 任务:一个用于运行测试,另一个用于在 Jest 的监视模式下运行它们。在每个工作区的 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
    }
  }
}

你现在可以使用全局 turbo 运行 turbo test:watch,或者从根 package.json 中的脚本运行:

Terminal
turbo test
Terminal
turbo test:watch