☰
Ghostfolio 仓库 Angular 端到端(E2E)测试接入实战:框架选型、ng add 配置与运行指南
2026/10/2 8:20:16 网站建设 项目流程
  • 后端
  • 前端
  • 金融科技
  • 数据可视化

【免费下载链接】ghostfolio

Open Source Wealth Management Software. Angular + NestJS + Prisma + Nx + TypeScript 🤍

项目地址:https://gitcode.com/GitHub_Trending/gh/ghostfolio
点击查看免费下载

本篇技术指南围绕 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之前,需要确认以下几点:

  1. 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命令。

  2. 依赖已安装:在仓库根目录执行npm install(或npm ci),确保node_modules就绪;注意 Ghostfolio 的postinstall脚本会触发prisma generate,首次安装耗时较长属正常现象。

  3. 明确 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一条命令完成框架依赖安装、配置生成与测试文件脚手架。五种受支持框架及对应命令如下:

框架安装命令特点
Playwrightng add playwright-ng-schematics微软出品,支持 Chromium / Firefox / WebKit 三内核,自带自动等待与网络拦截能力
Cypressng add @cypress/schematic拥有图形化 Test Runner,断言语法直观,是 Nx 生态集成最深的方案之一
Nightwatchng add @nightwatch/schematics基于 W3C WebDriver 协议,与 Selenium Grid 生态兼容
WebdriverIOng add @wdio/schematics也是 WebDriver 协议实现,插件体系丰富,适合已有 Selenium 技术栈的团队
Puppeteerng add @puppeteer/ng-schematicsChrome 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 client

Ghostfolio 的 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 仓库,可以得到一条清晰的接入路径:

  1. 确认现状:apps/client仅有 Jest 单元测试 target,无e2etarget、无e2e目录;package.json的devDependencies中也未直接安装任何 E2E 框架依赖(@nx/cypress、@nx/playwright仅作为 Nx 的可选集成出现在 package-lock.json 的传递依赖中)。因此当前完全符合原文档“工作区未配置 E2E 框架”的启用条件。

  2. 选择框架:仓库的 Nx 生成器预设为 Cypress(nx.json 的"e2eTestRunner": "cypress"),与 Nx 集成最深、文档最全;若更看重多浏览器覆盖,则选 Playwright。二选一即可。

  3. 接入并注册 target:执行对应ng add命令后,确认client项目的project.json中新增了e2etarget,此时 nx.json 预设的e2e缓存默认配置会自动生效。

  4. 运行与沉淀:用nx e2e client本地验证,将首条冒烟用例(如“打开仪表盘页面并断言资产卡片渲染”)纳入 CI,再逐步扩展关键用户旅程(创建账户、录入交易、查看投资组合报表)。

  5. 配套资料: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 🤍

项目地址:https://gitcode.com/GitHub_Trending/gh/ghostfolio
点击查看免费下载

相关推荐

上一篇:Aptos MoveFlow 规范推断评估:round-v1.2-005-opus 轮次的准备、校验与可复现性实践
下一篇:MAS 激活工具速览:免费 Windows 激活与 Office 激活,四种方法一次讲清

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询