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.
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.
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.
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.
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.
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
1:42:18
28:14
41:09
9:47
8:23
52:31