Skip to content
On this page

Monorepo中的Testing

linting 和构建一样,测试也是生产就绪 monorepo 的重要组成部分。无论您使用的是端到端测试还是单元测试套件,将它们与 Turborepo 集成将带来巨大的速度提升。

运行测试任务

假设我们有一个 monorepo,看起来像这样:

├── apps
│   └── web
│       └── package.json
└── packages
    └── shared
        └── package.json

apps/webpackages/shared 都有自己的测试套件。它们的 package.json 文件是这样的:

json
// apps/web/package.json
{
  "scripts": {
    "test": "jest"
  }
}
json
// apps/web/package.json
{
  "scripts": {
    "test": "vitest run"
  }
}

rootturbo.json 中,我们建议您在 pipeline 中设置一个 test 任务:

json
{
  "pipeline": {
    "test": {}
  }
}

现在,您可以运行 turbo test 并让 Turborepo 测试整个存储库。

由于 Turborepo 的缓存,这也意味着只有修改过文件的存储库才会被测试 —— 从而节省了大量时间。

监听模式下运行 test

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

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

由于这种差异,我们建议指定两个单独的 Turborepo 任务:一个用于运行测试,另一个用于在监视模式下运行它们。

下面是一个例子:

json
// apps/web/package.json

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

{
  "scripts": {
    "test": "vitest run",
    "test:watch": "vitest"
  }
}
json
{
  "pipeline": {
    "test": {},
    "test:watch": {
      "cache": false
    }
  }
}
json
{
  "scripts": {
    "test": "turbo run test",
    "test:watch": "turbo run test:watch"
  }
}