Turborepo

Playwright

Playwright 为现代 Web 应用程序提供可靠的端到端测试。

我们建议为要在 monorepo 中运行的每个测试套件创建一个 Playwright 包。 这可能意味着根据您的需要,将套件按应用程序、按域或其他方案拆分。 如果您不确定,请从每个应用程序创建一个 Playwright 包开始。

处理 Playwright 的环境变量

Playwright 需要多个环境变量才能正确运行。为了确保这些变量在 严格模式 下的任务中可用,您需要使用 end-to-end 任务中的 passThroughEnv 或全局的 globalPassThroughEnv 将它们添加到传递变量中,具体取决于您的作用域首选项。

下面的配置使用 passThroughEnv 将允许以 PLAYWRIGHT_ 开头的环境变量进入 e2e 任务,并且 不会影响哈希

./turbo.json
{
  "tasks": {
    "e2e": {
      "passThroughEnv": ["PLAYWRIGHT_*"]
    }
  }
}

请注意,由于我们不想在这些 Playwright 内部变量发生更改的情况下错过缓存,因此使用了传递变量。例如,PLAYWRIGHT_BROWSERS_PATH 用于查找 Playwright 使用的浏览器二进制文件,我们不希望此位置发生更改时错过缓存。

设计任务图

我们希望确保端到端套件的正确缓存行为。 具体来说,我们希望确保在以下几种关键情况下发生缓存未命中:

  • 如果测试套件发生更改,则会发生缓存未命中。
  • 如果套件测试的代码发生更改,则会发生缓存未命中。

第一个要求将自然地满足,因为当测试代码发生更改时,任务的哈希值将发生更改。 但是,第二个要求意味着您需要确保端到端测试依赖于应用程序源代码中的更改。

这种关系可以在 turbo.json 和端到端套件的 package.json 中表达。

./turbo.json
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"]
    },
    "e2e": {
      "dependsOn": ["^build"] 
    }
  }
}

稍后,当您想要运行端到端测试时,请使用 --only 标志 运行端到端测试,而无需先运行应用程序的构建。 例如,您的命令可能如下所示: turbo run e2e --filter=@repo/playwright-myapp --only

共享 Playwright 实用程序

您还可以为端到端测试套件中需要的共享实用程序创建一个公共包。 我们建议在此共享包中使用 peerDependencies,以便您可以访问使用者中使用的 Playwright,而无需将 Playwright 安装到共享包本身中。

./packages/playwright-utilities/package.json
{
 "name": "@repo/playwright-utilities",
 "peerDependencies": {
   "playwright": "*"
}
}

小时

节省的总计算量
开始使用
远程缓存 →

本页内容