SuperAPI AI 工具集

Testing Blocks

测试与质量

查看项目

更新于 10-15 10:05

技能介绍

Testing Blocks 是一个用于指导 AEM Edge Delivery Services 项目代码变更测试的技能。它适用于在实现或修改区块之后、修改核心脚本(scripts.js、delayed.js、aem.js)之后、修改样式(styles.css、lazy-styles.css)之后、修改影响功能的配置之后,以及在任何包含代码变更的拉取请求(PR)开启之前使用。该技能通常由 building-blocks 技能在实现完成后自动调用。

测试理念:价值与成本 该技能遵循一个务实的原则:当测试带来的价值超过其创建与维护成本时,才创建和维护测试。据此将测试分为两类。

保留型测试(高价值,值得维护):适用于跨多个区块使用的逻辑密集型工具函数、数据处理与转换逻辑、API 集成与外部服务交互、复杂算法或业务逻辑、共享库与辅助函数。这类测试能捕获复用代码的回归、充当活文档,且运行快速、易于维护。

一次性测试(较低价值,一次性使用):适用于区块装饰逻辑(DOM 转换)、特定 DOM 结构或 UI 布局、视觉外观验证、区块特定的渲染行为。这类测试更适合在浏览器中进行,因为 DOM 结构变化频繁、视觉验证需要人工判断,且维护 UI 测试的成本相对其价值较高。即使是一次性测试也有价值:可用于验证实现是否正确、截图评估视觉正确性、向他人展示截图获取反馈,以及在 PR 中包含截图以辅助审查。一次性测试脚本应放在 test/tmp/,测试内容放在 drafts/tmp/,两个目录都应加入 gitignore,避免临时测试产物被提交。

测试清单 在开启拉取请求前,需完成以下全部事项:现有测试通过;为逻辑密集型工具或数据处理编写新的保留型单元测试;在本地开发服务器中验证功能并截图;测试区块的每个变体/配置;在移动端、平板、桌面视口测试响应式行为;npm run lint 无错误通过;代码提交并推送到功能分支;使用 gh checks 确认所有 CI 检查通过。

测试方法

  1. 单元测试(保留型):适用于逻辑密集型函数、工具、数据处理、API 集成。使用 npm test 验证测试环境,用 vitest 编写测试(如 test/utils/my-utility.test.js),开发期间可用 npm run test:watch 运行。详细指南见 resources/unit-testing.md。

  2. 浏览器测试(一次性):适用于区块装饰、视觉验证、DOM 结构、响应式设计。测试脚本放在 test/tmp/test-{block}-browser.js,测试内容放在 drafts/tmp/{block}.html,截图放在 test/tmp/screenshots/。使用 Playwright:npm install --save-dev playwright 和 npx playwright install chromium。用 aem up --html-folder drafts 启动开发服务器,编写一次性测试脚本(示例使用 playwright 的 chromium、page.goto、page.waitForSelector、page.screenshot),用 node 运行,完成后可清理。详细指南见 resources/browser-testing.md。

  3. 代码检查(始终执行):每次提交前运行 npm run lint,可用 npm run lint:fix 自动修复。lint 必须通过才能开启 PR。

  4. 性能测试(自动化):推送分支后通过 GitHub 检查自动运行。推送分支后,PR 描述中必须包含测试链接(格式如 Preview: https://branch--repo--owner.aem.page/path/to/test),然后用 gh pr checks --watch 监控。

完整工作流 开发期间:为新工具编写单元测试,运行 npm run test:watch,在浏览器中手动测试。提交前:运行 npm test 确保全部通过,运行 npm run lint,在 test/tmp/ 编写一次性浏览器测试,在 drafts/tmp/ 创建测试内容,查看 test/tmp/screenshots/ 中的截图,在浏览器中手动验证。开启 PR 前:提交并推送到功能分支(test/tmp/ 不会被包含),验证分支预览可加载,运行 gh checks,创建带测试链接的 PR,监控 gh pr checks。PR 审查后:处理反馈、重新测试、确认检查通过。

故障排查 测试失败:仔细阅读错误信息,运行单个测试 npm test -- path/to/test.js,修复代码或更新测试。Lint 失败:运行 npm run lint:fix,手动修复剩余问题。GitHub 检查失败:确保 PR 有测试链接,用 gh pr checks 查看详情,若 PSI 失败则修复性能问题。浏览器测试失败:确认开发服务器运行(aem up --html-folder drafts),检查 drafts/tmp/ 中测试内容存在,确认 URL 使用 /tmp/ 路径(如 http://localhost:3000/drafts/tmp/my-block),添加等待如 await page.waitForSelector('.block')。

资源 单元测试:resources/unit-testing.md;浏览器测试:resources/browser-testing.md;测试工作流:resources/testing-workflow.md;故障排查:resources/troubleshooting.md;Vitest 配置:resources/vitest-setup.md。

与 building-blocks 技能的集成 building-blocks 技能在实现完成后自动调用本技能。预期流程:building-blocks 完成实现,调用 testing-blocks 技能,本技能指导测试过程,测试完成后返回控制权。building-blocks 提供:正在测试的区块名称、来自 CDD 过程的测试内容 URL、需要测试的变体。本技能返回:所有测试通过的确认、浏览器测试截图(如被请求)、测试中发现的问题。

总结 AEM Edge Delivery 中的测试遵循务实的价值与成本方法。为逻辑密集型工具、数据处理与转换、API 集成、共享库创建保留型测试;为区块装饰验证、视觉外观、DOM 结构、交互行为使用一次性浏览器测试。始终做到:提交前运行 lint、在浏览器中手动测试、确认 GitHub 检查通过、在 PR 中包含测试链接。目标是确信代码正确工作,而非追求 100% 测试覆盖率。