Agent-skills-standard angular-testing
Write Angular component tests using TestBed, ComponentHarness, and HttpTestingController with proper signal input handling. Use when writing component tests, mocking HTTP calls, or testing signal inputs. (triggers: **/*.spec.ts, TestBed, ComponentFixture, TestHarness, provideHttpClientTesting)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/angular/angular-testing" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-angular-testing && rm -rf "$T"
manifest:
skills/angular/angular-testing/SKILL.mdsource content
Testing
Priority: P1 (HIGH)
1. Query via Component Harnesses
- Use
(e.g.,ComponentHarness
) not CSS selectors — stable across DOM changes.MatButtonHarness
+loader.getHarness(MatButtonHarness)
. Never query by CSS class.await button.click()
See harness pattern for ComponentHarness examples.
2. Mock HTTP with HttpTestingController
not manual HttpClient mocks.provideHttpClientTesting()- Call
,expectOne
,.flush(mockData)
inverify()
.afterEach
See harness pattern for HttpTestingController examples.
3. Test Signal Inputs Correctly
— not direct assignment.fixture.componentRef.setInput('name', value)
afterfixture.detectChanges()
.setInput()- Signals sync — no
needed for most signal-driven tests.fakeAsync
4. Choose Your Test Runner
- Angular v20+: Vitest via
— faster, native ESM, no Karma. Configure in@angular/build:unit-test
.angular.json - Jasmine/Karma still supported for existing projects.
- Standalone: import directly in
.TestBed.configureTestingModule({ imports: [StandaloneComponent] })
Anti-Patterns
- No DOM CSS selectors: Query via
, not CSS class strings.ComponentHarness - No manual HttpClient mock: Use
+provideHttpClientTesting()
.HttpTestingController - No direct @Input() assignment: Use
for signal inputs.fixture.componentRef.setInput()