Angular Spec Auditor

VerifiedCaution

Independently audits an Angular spec file against migration guidelines, using a checklist and ESLint validation.

Sby Skills Guide Bot
TestingAdvanced
11/9/2026
Claude Code
#angular#unit-testing#jest#testing-library#spec-audit

Recommended for

Automated summary

Audits an Angular component spec file against the project's migration guidelines and fixes detected deviations.

Strengths

  • Runs a concrete strict ESLint check and treats every reported issue as a FAIL.
  • Provides a PASS/FAIL checklist covering structure, dependency-injection style, and coverage.
  • Automatically derives the component and template paths and requires an independent review.
  • Prescribes fixes using TestBed.inject and jest.spyOn instead of useValue.

Limitations

  • Relies on repository-specific files (.claude/rules/angular-specs.md and .eslintrc.strict-specs.js), so it is not portable as-is.
  • The supplied SKILL.md ends mid-sentence in Step 3, leaving the fix procedure incomplete.
  • Assumes a specific Angular/Jest setup, including non-standalone components and legacy ESLint configuration handling.
When to use it

Use when auditing or migrating Angular Jest spec files in a repository that already has the described rules and strict ESLint configuration.

When not to use it

Do not use for non-Angular test suites, projects without the referenced configuration, or when a generic Angular testing review is expected.

Security analysis

Caution
Quality score90/100

The skill is a legitimate Angular test-auditing workflow and does not attempt exfiltration, obfuscation, or destructive commands. However, it executes a shell command with a user-provided path, may invoke `npx` package resolution, and edits files while declaring no allowed tools, so it is best rated caution rather than safe.

Findings
  • •The skill requires shell execution (`npx eslint`) and file editing, but no allowed-tools are declared, so the agent may need broader permissions than expected.
  • •The ESLint command interpolates a user-supplied spec path without explicit quoting or validation; a path containing shell metacharacters could enable command injection.
  • •`npx eslint` can download and execute packages if ESLint is not already installed, and it loads a project-local config/plugins, which is legitimate but executes code from the repository.
  • •The skill automatically edits the target spec file without an explicit confirmation step; this is expected for the task but is a code-modification risk.
  • •Instructs the agent to run `npx eslint` from `src/main/app`, which executes local Node tooling/config and may fetch/install packages via npx if dependencies are missing.
  • •Requires file-read and file-edit capabilities to inspect specs/components and modify spec files, although no `allowed-tools` are declared.
  • •Edits are scoped to spec files and explicitly forbid touching component source files, limiting blast radius.
How this analysis is made

Examples

Audit a dialog spec
/audit-ng-spec-skill src/main/app/src/app/taken/taken-vrijgeven-dialog/taken-vrijgeven-dialog.component.spec.ts
Audit and fix a component test
Run the Angular spec audit on src/main/app/src/app/foo/foo.component.spec.ts and fix every FAIL according to .claude/rules/angular-specs.md.

Angular Spec Auditor

Independently audit an Angular component spec file against the project's migration guidelines.

Usage: /audit-ng-spec-skill $ARGUMENTS $ARGUMENTS = path to the spec file (relative from repo root), e.g. src/main/app/src/app/taken/taken-vrijgeven-dialog/taken-vrijgeven-dialog.component.spec.ts

If $ARGUMENTS is omitted, ask the user for the spec path before proceeding.


You did NOT write this spec. Treat it with completely fresh eyes.

Step 1 — Read context

  1. Read .claude/rules/angular-specs.md.
  2. Read the spec at {SPEC_PATH}.
  3. Derive the component path from the spec path (same directory, .component.ts instead of .component.spec.ts), read it.
  4. Derive the template path (.component.html), read it if it exists.
  5. From src/main/app/, run the check that CI applies to a touched spec, and treat every problem it reports as a FAIL: ESLINT_USE_FLAT_CONFIG=false npx eslint -c .eslintrc.strict-specs.js <spec path relative to src/main/app>. It already covers any, NO_ERRORS_SCHEMA, DOM queries outside Testing Library (By.css, querySelector, node access such as .children or .closest()), fireEvent instead of userEvent.setup(), rendering in beforeEach, and object literals cast through unknown. Fix those as .claude/rules/angular-specs.md describes; never replace one banned query with another. It does not catch debugElement.query(By.directive(…)) or within(fixture.nativeElement); mark those FAIL yourself.

Step 2 — Audit

For each item, mark PASS or FAIL with a one-line reason and the exact line(s) involved.

Rules

  • [ ] No : void return type annotations anywhere in the spec
  • [ ] No trivial smoke tests (it("should create", ...) or similar)
  • [ ] Variable naming: no single-letter or abbreviated names (el, f, res, btn). Use full descriptive names (element, fixtureRef, result, button).
  • [ ] SPDX header: new file → <current year> INFO.nl only; existing file → INFO.nl added only if completely absent from the existing line

Spec structure

  • [ ] describe(ClassName.name, ...) — class name reference, not a string literal
  • [ ] declarations: [Component] used (component is standalone: false), OR imports: [Component] if already standalone
  • [ ] Services should use TestBed.inject() + jest.spyOn() — avoid useValue: mockObject.
    • Reason: type safety. useValue accepts any object — typos, missing methods, wrong return types all silently pass. jest.spyOn is checked against the real service type, so the compiler catches mismatches.
    • Strongly preferred pattern:
      providers: [provideHttpClient(), provideRouter([]), MyService],
      // ...
      myService = TestBed.inject(MyService);
      jest.spyOn(myService, "someMethod").mockReturnValue(of(result));
      
    • useValue is acceptable when genuinely difficult to avoid (e.g. a service with a deeply complex DI tree that cannot be satisfied without significant setup). Flag it with a comment explaining why.
    • Always acceptable exceptions: Angular built-in injection tokens (MAT_DIALOG_DATA, LOCALE_ID, APP_BASE_HREF, etc.) where no real class exists to inject.
    • TranslateService → use provideTranslateService() in providers, then TestBed.inject(TranslateService) + jest.spyOn.
    • Services using ZacHttpClient → add provideHttpClient() to providers.
    • Services using Router → add provideRouter([]) to providers.
  • [ ] provideHttpClient() present if any service in the tree uses ZacHttpClient
  • [ ] provideRouter([]) present if any service in the tree uses Router

Coverage

  • [ ] Every test asserts meaningful behaviour
  • [ ] ≥90% of template behaviours covered (buttons, conditionals, outputs, form states)
  • [ ] Protected/private members accessed via bracket notation: component["member"]

Step 3 — Fix

For each FAIL: edit the spec file with the correct fix. Do NOT touch any component source files.

After all fixes are applied, re-read the spec to confirm no violations remain.

Step 4 — Report

AUDIT: PASS                         (if nothing needed fixing)
AUDIT: PASS (N issues fixed)        (if fixes were applied)

Issues fixed:
- Line X: <description of fix>
- ...

If a violation cannot be auto-fixed (e.g. missing test coverage that requires understanding domain logic), list it as a manual action required item and do not mark the audit PASS until the user addresses it.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/angular-spec-auditor-mvj1ocui' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/angular-spec-auditor-mvj1ocui/download' --output '.skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md.part' && mv '.skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md.part' '.skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills