Claude CodeIntermediate

How to Raise Test Coverage on a Specific File with Claude Code

Use a coverage report to find untested branches in one file and have Claude write tests that target only the gaps.

8 minIntermediate

Chasing a coverage percentage across a whole repo produces noise. A better target is one important file whose untested branches scare you. Generate a coverage report, hand Claude the exact uncovered lines, and ask only for the missing cases. This keeps the new tests purposeful rather than padding.

What you need

  • Claude Code running in your project
  • A test runner with coverage output (Vitest, Jest with --coverage, or pytest-cov)
  • One file you care about covering well

Step 1: Generate a coverage report for the file

Run coverage scoped to the area you care about. The text summary tells you the percentage; the per-line report tells you which branches are missing, which is what Claude actually needs.

zsh - my-app
$npx vitest run --coverage src/lib/pricing.ts
File | % Stmts | % Branch | Uncovered Line #s
pricing.ts | 71.4 | 50.0 | 42-47, 63
$

Step 2: Ask Claude to target the uncovered branches

Give Claude the file and the uncovered line numbers. Tell it not to rewrite existing tests, only to add cases that exercise those branches. Naming the lines stops it from re-testing things that already pass.

Claude Code
You
Coverage on src/lib/pricing.ts is missing branches at lines 42-47 and 63. Add tests that hit those branches only. Do not modify the existing test file's current cases.
Agent
Lines 42-47 are the bulk-discount path and line 63 is the negative-quantity guard. I'll add two describe blocks targeting those.
Hand over the exact gaps so the new tests are targeted.

Step 3: Inspect the new cases for real intent

Coverage-driven tests can technically execute a line while asserting nothing meaningful. Check that each new test asserts the behavior of that branch, not just that it ran without throwing.

src/lib/__tests__/pricing.test.ts
it("applies the bulk discount above the threshold", () => {
  expect(priceFor({ qty: 100, unit: 2 })).toBe(170); // 15% off
});

it("rejects a negative quantity", () => {
  expect(() => priceFor({ qty: -1, unit: 2 })).toThrow(/quantity/);
});

Step 4: Re-run coverage to confirm the gap closed

Run the coverage command again. The previously uncovered lines should disappear from the report. If a branch is still red, paste the remaining lines back to Claude and ask it to finish.

Coverage summary
File | % Stmts | % Branch | Uncovered Line #s
-------------|---------|----------|------------------
pricing.ts | 100.0 | 100.0 | -
All target branches now covered.
Coverage is not correctness
A green coverage number only means lines ran. Read the assertions. A test that calls a function and asserts nothing useful raises coverage while protecting nothing.

Result: pricing.ts moves from 50 percent branch coverage to full coverage with two tests that describe the discount and guard logic in plain terms.

Watch related tutorials

Tags
#testing#coverage#branches