集成 Playwright

Playwright

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

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

处理 Playwright 的环境变量

Playwright 需要几个环境变量才能正常运行。为了确保这些变量在严格模式下的任务中可用,你需要使用 passThroughEnv 在端到端任务中添加它们,或者根据你的作用域偏好,使用 globalPassThroughEnv 全局添加它们。

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

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

注意,使用传递变量是因为我们不想在这些 Playwright 内部变量更改的情况下错过缓存。例如,PLAYWRIGHT_BROWSERS_PATH 用于定位 Playwright 使用的浏览器二进制文件,如果这个位置改变,我们不想错过缓存。

设计任务图

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

  • 如果测试套件发生变化,缓存会被错过。
  • 如果套件测试的代码发生变化,缓存会被错过。

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

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

Turborepo logo
./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": "*"
}
}