用途:面向 Angular 组件测试的规范技能,优先级 P1(HIGH)。核心理念是覆盖率只作诊断且由项目配置,应验证按风险加权的关键路径,而非为凑百分比写低价值测试。
主要能力:提供一组核心规则锚点。[WEB-TEST-01] 测试命名须遵循 Method_Scenario_ExpectedBehavior,并严格遵守 Arrange-Act-Assert。 [WEB-TEST-02] 通过 ComponentHarness(如 MatButtonHarness)或可访问性查询获取 UI 组件,严禁原始 CSS 类选择器或任意 DOM 遍历。 [WEB-TEST-03] 禁止检查组件私有状态或内部属性,应断言可见 DOM 状态、输出事件或 harness 查询结果。 [WEB-TEST-04] 用 provideHttpClientTesting() + HttpTestingController 在边界拦截 HTTP,而非 mock 内部服务或方法,测试须验证真实组件数据流。 [WEB-TEST-05] 每个修复 bug 或标题为 fix(...) 的 PR 必须先加入复现缺陷的测试。
使用方式:查询用 ComponentHarness,如 loader.getHarness(MatButtonHarness) 配合 await button.click(),绝不按 CSS 类查询。HTTP mock 用 provideHttpClientTesting() + HttpTestingController,调用 expectOne、.flush(mockData),并在 afterEach 中 verify()。Signal 输入用 fixture.componentRef.setInput('name', value) + fixture.detectChanges(),而非直接赋值;signal 同步,多数 signal 驱动测试无需 fakeAsync。测试运行器方面,Angular v20+ 默认通过 @angular/build:unit-test 使用 Vitest(更快、原生 ESM、无 Karma),在 angular.json 中配置;Jasmine/Karma 仍受支持。Standalone 组件可直接在 TestBed.configureTestingModule({ imports: [StandaloneComponent] }) 中导入。
限制:暂无更多可用信息。反模式包括模糊测试名、混合 AAA 阶段、使用原始 CSS 选择器或 DOM 遍历、测试私有状态、手动 mock HttpClient、缺少复现测试的 bug 修复,以及为凑覆盖率写低价值测试。