- 后端
- 前端
- 金融科技
- 数据可视化
【免费下载链接】ghostfolio
Open Source Wealth Management Software. Angular + NestJS + Prisma + Nx + TypeScript 🤍
本篇技术指南围绕 e2e-testing.md 展开,讲解在 Angular 工作区中从零接入端到端(E2E)测试的完整路径:何时适合引入 E2E、如何通过
ng add一次性接入 Playwright / Cypress / Nightwatch / WebdriverIO / Puppeteer 五种主流框架、如何用ng e2e统一执行测试,以及如何在package.json中挂接企业级自定义测试工具。文章同时结合 Ghostfolio 开源仓库(Angular 22 + NestJS + Prisma + Nx 的 Nx 工作区)的真实工程现状,给出可直接落地的配置建议与源码级佐证,读完即可在自己的 Angular 项目中复现整套 E2E 测试链路。
何时才需要配置 E2E 测试
原文档开篇有一条醒目的[!IMPORTANT]约束,值得先理解:
仅当工作区中尚未配置任何 E2E 测试框架,或用户明确要求变更 / 搭建 E2E 测试时,才使用本文档中的搭建指南。
这条约束背后的工程原则是:E2E 测试依赖真实浏览器环境,执行速度慢、维护成本高,属于测试金字塔的顶层。Angular 项目正确的测试分层通常是这样:
- 单元测试(Unit):覆盖组件、服务、指令等最小逻辑单元,由
TestBed+ 测试运行器(如 Jest)驱动; - 集成测试 / 组件测试:验证多个单元协作,常借助 Component Harness;
- 端到端测试(E2E):启动真实浏览器,模拟用户完整操作路径,验证前后端联动的真实行为。
以 Ghostfolio 仓库为参照:客户端应用 apps/client/project.json 当前只声明了testtarget(执行器为@nx/jest:jest,基于 apps/client/jest.config.ts 的 jest-preset-angular 配置),apps/client目录下也尚无e2e目录或对应 target。也就是说,这个 Nx 工作区当前没有已配置的 E2E 测试框架——正好满足原文档启用搭建指南的前提条件。同时,nx.json 中@nx/angular:application生成器已把e2eTestRunner预设为"cypress",说明仓库对新建 Angular 应用的 E2E 测试器的默认倾向就是 Cypress(详见下文“仓库中的 E2E 现状”)。
接入前的环境准备
执行ng add之前,需要确认以下几点:
Angular CLI 可用:Ghostfolio 的 package.json 中封装了
angular脚本(node --max_old_space_size=32768 ./node_modules/@angular/cli/bin/ng),CLI 版本为 22.1.x。执行ng add时可以直接使用工作区内的 CLI:npm run angular add playwright-ng-schematics或直接调用全局 / 工作区内的
ng命令。依赖已安装:在仓库根目录执行
npm install(或npm ci),确保node_modules就绪;注意 Ghostfolio 的postinstall脚本会触发prisma generate,首次安装耗时较长属正常现象。明确 E2E target 归属:Ghostfolio 使用 Nx 管理多项目工作区(
apps/api、apps/client、libs/ui等),E2E 测试通常挂在前端应用项目(client)之下,因此接入框架后运行测试的命令是ng e2e client或nx e2e client。
通过 ng add 接入主流 E2E 框架
原文档给出了一套非常统一的接入方式:借助 Angular CLI 的 schematics 机制,用ng add一条命令完成框架依赖安装、配置生成与测试文件脚手架。五种受支持框架及对应命令如下:
| 框架 | 安装命令 | 特点 |
|---|---|---|
| Playwright | ng add playwright-ng-schematics | 微软出品,支持 Chromium / Firefox / WebKit 三内核,自带自动等待与网络拦截能力 |
| Cypress | ng add @cypress/schematic | 拥有图形化 Test Runner,断言语法直观,是 Nx 生态集成最深的方案之一 |
| Nightwatch | ng add @nightwatch/schematics | 基于 W3C WebDriver 协议,与 Selenium Grid 生态兼容 |
| WebdriverIO | ng add @wdio/schematics | 也是 WebDriver 协议实现,插件体系丰富,适合已有 Selenium 技术栈的团队 |
| Puppeteer | ng add @puppeteer/ng-schematics | Chrome DevTools Protocol 直连,适合只面向 Chromium 的场景 |
以上五条命令必须逐字保留,它们是原文档的核心可操作内容。schematics 安装器通常会自动完成以下工作:
- 在
package.json的devDependencies中追加对应框架依赖; - 在
angular.json/ Nx 的project.json中注册e2etarget; - 生成默认的 E2E 测试目录(如
e2e/或cypress/)与首个示例用例。
注意:选择框架时应基于项目实际约束——例如 CI 环境是否允许下载浏览器二进制(Playwright / Puppeteer 需要)、团队是否已有 WebDriver 类工具链(Nightwatch / WebdriverIO)等。原文档不主张同时接入多个框架,一般一个项目只保留一种 E2E 运行器。
运行 E2E 测试:ng e2e 与 Nx 的配合
框架接入完成后,统一通过以下命令运行:
ng e2e [project] [options]参数说明:
[project]:可选。省略时作用于默认项目;Ghostfolio 中应显式指定client(即ng e2e client),因为该工作区默认项目是api(见 nx.json 的"defaultProject": "api"),而 E2E 属于前端范畴。[options]:框架相关的运行选项,例如指定浏览器、开启 headed 模式、过滤测试文件、设置 baseUrl 等,具体以所选框架为准。
在 Nx 工作区中,同一 target 也可以用 Nx 语法触发:
nx e2e clientGhostfolio 的 nx.json 已为e2etarget 声明了全局默认配置:
"e2e": { "inputs": ["default", "^production"], "cache": true }这意味着:一旦e2etarget 存在,Nx 会对它启用任务缓存与输入追踪——只有相关源码(default输入)或上游生产代码(^production)发生变化时才会真正重跑测试,否则直接复用缓存结果,显著节省 CI 时间。这正是将 E2E 测试注册为 Nx target 而非散落脚本的工程价值。
自定义与企业级测试工具:从 package.json scripts 挂接
原文档指出:对于自定义或企业级 runner(如 Katalon Studio、TestCafe、Selenium 等),Angular CLI 的 schematics 生态可能没有现成的ng add支持,此时应在package.json的scripts中自行定义执行命令。
以 Ghostfolio 的 package.json 为例,其 scripts 结构本身就是这种模式的成熟实践:每个工作流都封装为一个命名脚本,再通过 Nx 转发到具体项目。参考写法:
{ "scripts": { "e2e:client": "nx run client:e2e", "e2e:client:ci": "nx run client:e2e --configuration=ci", "e2e:smoke": "katalon -noSplash -runMode=console -testSuitePath=\"Test Suites/Smoke\"" } }实践建议:
- 统一入口:把企业级工具的实际二进制调用封装进
scripts,团队成员无需记忆各工具专有命令; - 与 CI 对齐:为 CI 环境单独提供配置(如无头模式、测试报告上传、失败重试),避免本地与流水线行为不一致;
- 组合执行:可仿照 Ghostfolio 的
test脚本(nx run-many --target=test --all)用nx run-many批量跑多个项目的 E2E,或将 E2E 串进build:production之类的发布流水线。
无论使用哪种框架,E2E 测试都应遵循「真实用户路径」原则:登录 → 导航 → 操作 → 断言结果,覆盖单元测试无法触达的浏览器渲染、路由跳转与 API 联调环节。
仓库中的 E2E 现状与接入路径小结
把上述通用指南落回 Ghostfolio 仓库,可以得到一条清晰的接入路径:
确认现状:
apps/client仅有 Jest 单元测试 target,无e2etarget、无e2e目录;package.json的devDependencies中也未直接安装任何 E2E 框架依赖(@nx/cypress、@nx/playwright仅作为 Nx 的可选集成出现在 package-lock.json 的传递依赖中)。因此当前完全符合原文档“工作区未配置 E2E 框架”的启用条件。选择框架:仓库的 Nx 生成器预设为 Cypress(nx.json 的
"e2eTestRunner": "cypress"),与 Nx 集成最深、文档最全;若更看重多浏览器覆盖,则选 Playwright。二选一即可。接入并注册 target:执行对应
ng add命令后,确认client项目的project.json中新增了e2etarget,此时 nx.json 预设的e2e缓存默认配置会自动生效。运行与沉淀:用
nx e2e client本地验证,将首条冒烟用例(如“打开仪表盘页面并断言资产卡片渲染”)纳入 CI,再逐步扩展关键用户旅程(创建账户、录入交易、查看投资组合报表)。配套资料:E2E 之上可进一步参考本 skill 中的单元测试基础 testing-fundamentals.md(
TestBed、ComponentFixture与“Act, Wait, Assert”模式)与 component-harnesses.md,把测试金字塔三层补齐。
关键要点速查
- 前提约束:只有工作区尚无 E2E 框架、或用户明确要求时才执行搭建(见 e2e-testing.md 的 IMPORTANT 提示);
- 五种框架一条命令:
ng add playwright-ng-schematics/@cypress/schematic/@nightwatch/schematics/@wdio/schematics/@puppeteer/ng-schematics; - 统一执行:
ng e2e [project] [options],Nx 工作区写作nx e2e client,且会自动享受任务缓存; - 企业级工具:Katalon、TestCafe、Selenium 等通过
package.jsonscripts 封装调用入口; - 仓库参照:Ghostfolio 的 Nx 配置已为 E2E 预留 Cypress 默认与缓存策略,接入成本主要在于选择框架并执行一次
ng add。
- 后端
- 前端
- 金融科技
- 数据可视化
【免费下载链接】ghostfolio
Open Source Wealth Management Software. Angular + NestJS + Prisma + Nx + TypeScript 🤍
相关推荐
AgentGPT 本地部署实战:用内置 CLI 一键装配并运行浏览器内的自主 AI Agent
AgentGPT 本地部署实战:用内置 CLI 一键装配并运行浏览器内的自主 AI Agent AgentGPT 是一个开源的自主 AI Agent 平台,允许
AI AgentAI 应用后端前端Angular CLI 端到端(E2E)测试实战指南:从 `ng e2e` 配置到自定义测试目标
Angular CLI 端到端(E2E)测试实战指南:从 ng e2e 配置到自定义测试目标 端到端(End to End,简称 E2E)测试用于验证整个应用从
前端Web框架Cortex E2E 测试框架实战指南:从依赖安装到全量端到端测试运行
Cortex E2E 测试框架实战指南:从依赖安装到全量端到端测试运行 导读 本文基于 Cortex 仓库(Production infrastructure
后端云原生模型推理服务MLOps人工智能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考