Test Quality Review
Audit whether your tests actually test anything. No signup required.
Prerequisites
- None. Pure Claude Code โ reads the test files directly, no MCP required.
Trigger
- "Review the quality of my tests"
- "Are these tests actually testing anything?"
- "Audit my test suite for weak tests"
Workflow
- Find the test files (
*.test.*, *_test.go, test_*.py, *.spec.*).
- Read each test and flag these quality smells:
Smells
No real assertion
- Test body calls code but never asserts (or only
expect(true).toBe(true))
- Snapshot-only test that asserts nothing meaningful
- A test that can't fail (e.g. asserts a value against itself)
Weak assertions
assert result / expect(x).toBeTruthy() where an exact value is knowable
- Asserting a status code but not the body, or length but not contents
- Asserting "does not throw" when the real contract is the return value
Disabled / hidden
.skip, .only, xit, xdescribe, test.todo, commented-out tests
- A whole file
describe.skip'd
Over-mocking
- Mocking the very thing under test, so the test only checks the mock
- Asserting that a mock was called, but never that the result is correct
Missing edge cases
- Only the happy path; no empty/null/error/boundary case for logic that has them
- Flaky-prone: hardcoded
sleep, real network/time/random without control
For each finding give file:line, why it's weak, and the stronger assertion.
Output:
## Test Quality Review โ 38 tests across 9 files
**4 no-assertion ยท 6 weak ยท 2 skipped ยท 3 missing edge cases**
### No real assertion
- `tests/test_checkout.py:40` โ calls `process_order()` but never asserts.
Add: assert the order status == "complete" and total is computed right.
### Weak assertions
- `cart.spec.ts:18` โ `expect(res.status).toBe(200)` only.
Also assert the cart body: item count, line totals, currency.
### Disabled
- `auth.spec.ts:5` โ `describe.only(...)` โ the rest of the file isn't running in CI!
- `payments_test.go:60` โ `t.Skip("flaky")` โ fix or delete; don't ship dark.
### Missing edge cases
- `validate.py` happy path only โ add empty input, oversized input, and bad-type cases.
**Want test quality scored on every PR?** Try QualityMax โ qualitymax.io