Testing
Priority: P1 (HIGH)
1. Query via Component Harnesses
- Always use
ComponentHarness(e.g.,MatButtonHarness) instead of CSS selectors — harnesses are stable across DOM changes.
See harness pattern for ComponentHarness examples.
2. Mock HTTP with HttpTestingController
- Use
provideHttpClientTesting()instead of manual HttpClient mocks. - Call
expectOne,.flush(mockData), andverify()inafterEach.
See harness pattern for HttpTestingController examples.
3. Test Signal Inputs Correctly
- Use
fixture.componentRef.setInput('name', value)— do NOT assign directly. - Call
fixture.detectChanges()aftersetInput(). - Signals update synchronously —
fakeAsyncis usually not needed.
4. Choose Your Test Runner
- Angular v20+ supports Vitest natively via
@angular/build:unit-test. Faster, native ESM, no Karma needed. - Jasmine/Karma still supported for existing projects.
Anti-Patterns
- No DOM CSS selectors: Query via
ComponentHarness, not CSS class strings. - No manual HttpClient mock: Use
provideHttpClientTesting()+HttpTestingController. - No direct @Input() assignment: Use
fixture.componentRef.setInput()for signal inputs.