用途
该技能用于运行 Lightning Web Components(LWC)的 Sa11y 可访问性单元测试(Sa11y Jest),典型场景是在推送修复之前于本地先行验证。适用于用户提出在本地运行可访问性单元测试、已有一个已知失败的测试文件路径(例如来自 A11yBug 的 Test_Names__c)并希望直接定位、或正在迭代可访问性修复并需要最快的通过/失败信号。
Selenium 层面的复现、GUS A11yBug 入库以及其他 Salesforce 内部流程不在本技能范围内。如果需要在源代码层面进行 WCAG 审查而不运行测试,应参考 experience-accessibility-validate。
前置条件
- Bazel Jest 测试:需要 Salesforce core 构建环境(存在 WORKSPACE 文件)。
- 独立 Jest 测试:需要已安装并配置 @sa11y/jest。
使用方式
根据环境选择方式。如果并非 Salesforce core 构建环境,不要提及 Core 工作流。
Core(Bazel)
当存在 WORKSPACE 文件时使用此模式。基础命令为:
{coreRootPath}/tools/bazel test [TARGET] --test_output=streamed --test_env=SA11Y_AUTO=1 --test_env=SA11Y_ENABLE_DOM_MUTATION_OBSERVER=1
将 {coreRootPath} 替换为 Core 仓库根目录,{moduleName} 替换为模块名,{relativePath} 替换为去掉 .test.js 扩展名的测试文件路径。
发现目标与路径:
find {coreRootPath}/{moduleName} -name ".test.js" -type f {coreRootPath}/tools/bazel query "tests(//{moduleName}:)"
组件测试通常位于 modules/{componentDir}/{componentName}/tests/ 下。
已知失败测试路径时,优先使用单文件目标:
{coreRootPath}/tools/bazel test //{moduleName}:{relativePath} --test_output=streamed --test_env=SA11Y_AUTO=1 --test_env=SA11Y_ENABLE_DOM_MUTATION_OBSERVER=1
未知具体测试时,运行模块内全部 Sa11y Jest 测试:
{coreRootPath}/tools/bazel test //{moduleName}:sa11y_jest_test --test_output=streamed --test_env=SA11Y_AUTO=1 --test_env=SA11Y_ENABLE_DOM_MUTATION_OBSERVER=1
可以在同一命令中传入多个模块目标。要在模块内过滤测试,添加 --test_arg=--testMatch="/{modulePath}/"。
常用选项:
- 更新快照:--test_arg="--updateSnapshot"
- 禁用缓存测试结果:--cache_test_results=no
- 保存渲染后的 HTML:--test_env=SA11Y_ENABLE_RENDERED_DOM_SAVE=1 --test_env=SA11Y_RENDERED_DOM_SAVE_PATH=sfdc-test/unit/javascript/htdocs/sa11y/jest
使用 sfdc-test/unit/javascript/htdocs/sa11y/jest 作为渲染 DOM 保存路径,以避免 EPERM 错误。
独立(Jest)
当不存在 WORKSPACE 文件时使用此模式。运行所有可访问性测试:
不要在此模式下前置 SA11Y_* 环境变量;@sa11y/jest 通过项目的 Jest 设置激活。
npm test -- --testMatch="**/*.accessibility.test.js"
或定位特定文件:
npm test -- src/components/MyComponent/tests/MyComponent.accessibility.test.js
使用用户提供的文件名或路径。当指定的测试位于当前目录时,保持裸文件名而不虚构路径。
其他常用选项包括 --coverage、--updateSnapshot、--watch 和 --verbose。要定位具名测试,使用 npm test -- --testNamePattern="MyComponent accessibility"。
确保 Jest 使用 jsdom 环境并加载项目的 @sa11y/jest 设置文件。将随附的 assets/jest.config.js 模板复制或适配到项目的 Jest 配置中,并将 assets/sa11y-jest-setup.js 复制到 test/setup/sa11y-setup.js。如果项目已有 Jest 配置,合并相关设置而不是覆盖无关配置。
上文所示的 SA11Y_* 变量仅用于 Core/Bazel;Bazel 命令已包含它们。
响应范围
只回答用户所问。输出所请求的命令以及相关的退出码含义。除非用户要求,不要添加 watch、coverage、快照更新、HTML 保存或其他变体。
预期退出码
- Bazel:0 表示全部测试通过,3 表示测试失败,1 表示构建或命令失败。
- Jest:0 表示全部测试通过,1 表示测试失败或发生错误。
验证清单
- Sa11y Jest 运行完成并给出清晰通过/失败信号(Bazel 退出 0 或 3;Jest 退出 0 或 1)。
- 如果快照被有意更新,新快照与修复一同提交。
故障排查
- Bazel 测试“not found”——目标路径有误。记住在 {relativePath} 中去掉 .test.js 扩展名。
- HTML 保存失败并报 EPERM——使用规定的保存路径 sfdc-test/unit/javascript/htdocs/sa11y/jest。
- 独立测试不运行——检查测试命名模式、Jest 配置、@sa11y/jest 依赖和 jsdom 环境。