SuperAPI AI Directory

test-coverage

Agents & models

View repository

Updated 10-15 23:58

About this skill

Test Coverage

Increase test coverage to 90% on a target zone with iterative writing and refactoring.

Prompt Variables

$TARGET_ZONE

Directory path or Jira ticket URL for the zone to cover (e.g., src/mvvm/features/Accounts/ or https://ledgerhq.atlassian.net/browse/LIVE-1234)

Instructions

Follow all conventions from the testing skill (.agents/skills/testing/SKILL.md). Delegate test execution to the test-runner subagent throughout.

Step 1: Scope and Analyze

  1. If $TARGET_ZONE is a Jira URL, fetch the ticket via Atlassian MCP and extract affected files.
  2. Use code-explorer subagent to analyze the zone: trace execution paths, map dependencies, and identify branching logic worth testing.
  3. Measure current coverage:
    pnpm <mobile|desktop> test:jest --coverage \
      --collectCoverageFrom='<zone-glob>' \
      --coverageReporters=text-summary
    
  4. From the code-explorer analysis, build the list of files to test. Skip type definitions, barrel re-exports, and thin wrappers with no branching.
  5. For each remaining file, ask:
    • Does it contain branching logic, state transitions, or side effects?
    • Would a regression break user-facing behavior?
    • Is it already covered indirectly by a parent test? If all answers are no, skip.

Step 2: Write Tests

Order: pure utils -> hooks -> viewModels -> components with side effects.

For each file:

  1. Search existing mocks/fixtures/factories before creating new ones (see testing skill).
  2. Write tests following all testing skill conventions.
  3. Run tests via test-runner. Fix failures before moving to the next file.

Loop until coverage >= 90%.

Step 3: Refactoring Loop

Three sequential passes. After each pass, run tests via test-runner -- they must still pass before the next pass.

Pass 1 -- Audit mocks

  • For every mock (jest.mock, jest.fn, mockReturnValue, jest.spyOn): is it asserted directly or does it enable a code path whose output is asserted?
  • Remove any mock that satisfies neither. Simplify over-specified mocks.

Pass 2 -- Deduplicate

  • Scan all test files in the zone for repeated factories, inline fixtures, or mock setup blocks.
  • Duplicated within one file -> extract a local helper.
  • Duplicated across 2+ files -> move to nearest __tests__/shared.ts.
  • Used in one file only -> keep local.

Pass 3 -- Prune redundant tests

  • Two it blocks testing the same branch with trivially different inputs -> merge or remove.
  • Tests that only assert a mock was called without verifying output or state -> strengthen or remove.
  • Tests on logic-free getters (direct property access) -> remove.

Step 4: Summary Report

Output a report covering:

  • Coverage: before/after percentages
  • Tests written: for each file, what behaviors were tested and why they are relevant
  • Remaining gaps: files still below 90% and why