test-coverage-improver
Skill1 starsChanged 41 days agoMITView on GitHub
Analyze test coverage gaps and generate tests to improve coverage. Use when improving test coverage, finding untested code, or writing missing tests.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- redis/node-redistheir own version, first seen Oct 8, 2026
- OneWave-AI/claude-skillsword for word, first seen Sep 21, 2026
- openai/openai-agents-pythontheir own version, first seen Sep 8, 2026
- openai/openai-agents-jstheir own version, first seen Feb 3, 2026
Other versions4 projects use a version of this.
Word for word · 1
- OneWave-AI/claude-skills★ 378100% same
Edited · 0
None found.
Wrote their own version · 3
- openai/openai-agents-python★ 31ksame name
- redis/node-redis★ 18ksame name
- openai/openai-agents-js★ 4ksame name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- agent-armySkill
- before-you-buildSkill
- code-review-proSkill
- cold-email-sequence-generatorSkill
- content-repurposerSkill
- expert-debate-panelSkill
- landing-page-copywriterSkill
- linkedin-post-optimizerSkill
- objection-pattern-detectorSkill
- plan-in-filesSkill
- prospect-research-compilerSkill
- sales-call-prep-assistantSkill
- scoutSkill
- seo-optimizerSkill
- session-handoffSkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
When improving test coverage:
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Test Coverage Improver
Instructions
When improving test coverage:
- Run coverage report to identify gaps
- Prioritize critical/complex code paths
- Write tests for uncovered code
- Verify coverage improved
Generate Coverage Report
# Jest
npx jest --coverage
# Vitest
npx vitest --coverage
# NYC (Istanbul) for any test runner
npx nyc npm test
# View HTML report
open coverage/lcov-report/index.htmlCoverage Targets
| Type | Minimum | Good | Excellent |
| Lines | 70% | 80% | 90%+ |
| Branches | 60% | 75% | 85%+ |
| Functions | 70% | 80% | 90%+ |
| Statements | 70% | 80% | 90%+ |
Test Templates
Unit Test (Jest/Vitest)
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { calculateTotal, formatCurrency } from './utils';
describe('calculateTotal', () => {
it('should sum all item prices', () => {
const items = [
{ price: 10, quantity: 2 },
{ price: 5, quantity: 1 },
];
expect(calculateTotal(items)).toBe(25);
});
it('should return 0 for empty array', () => {
expect(calculateTotal([])).toBe(0);
});
it('should handle decimal prices', () => {
const items = [{ price: 10.99, quantity: 1 }];
expect(calculateTotal(items)).toBeCloseTo(10.99);
});
});Testing Async Functions
describe('fetchUser', () => {
it('should return user data', async () => {
const user = await fetchUser(1);
expect(user).toEqual({
id: 1,
name: expect.any(String),
email: expect.stringContaining('@'),
});
});
it('should throw for non-existent user', async () => {
await expect(fetchUser(999)).rejects.toThrow('User not found');
});
});Mocking Dependencies
import { vi } from 'vitest';
import { sendEmail } from './email';
import { createUser } from './user';
vi.mock('./email', () => ({
sendEmail: vi.fn().mockResolvedValue({ success: true }),
}));
describe('createUser', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('should send welcome email after creating user', async () => {
await createUser({ name: 'John', email: 'john@test.com' });
expect(sendEmail).toHaveBeenCalledWith({
to: 'john@test.com',
template: 'welcome',
});
});
});React Component Testing
import { render, screen, fireEvent } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { Button } from './Button';
describe('Button', () => {
it('should render children', () => {
render(<Button>Click me</Button>);
expect(screen.getByText('Click me')).toBeInTheDocument();
});
it('should call onClick when clicked', async () => {
const handleClick = vi.fn();
render(<Button onClick={handleClick}>Click</Button>);
await userEvent.click(screen.getByRole('button'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
it('should be disabled when loading', () => {
render(<Button isLoading>Submit</Button>);
expect(screen.getByRole('button')).toBeDisabled();
});
});API Route Testing
import { createMocks } from 'node-mocks-http';
import handler from './api/users';
describe('GET /api/users', () => {
it('should return users list', async () => {
const { req, res } = createMocks({ method: 'GET' });
await handler(req, res);
expect(res._getStatusCode()).toBe(200);
expect(JSON.parse(res._getData())).toHaveProperty('users');
});
});Branch Coverage Checklist
Ensure tests cover:
- If/else branches
- Ternary operators
- Switch cases (including default)
- Try/catch blocks
- Early returns
- Nullish coalescing (
??) - Optional chaining results (
?.) - Loop conditions (0, 1, many iterations)
Coverage Configuration
// vitest.config.ts
export default {
test: {
coverage: {
provider: 'v8',
reporter: ['text', 'html', 'lcov'],
exclude: [
'node_modules/',
'**/*.d.ts',
'**/*.test.ts',
'**/types/',
],
thresholds: {
lines: 80,
branches: 75,
functions: 80,
statements: 80,
},
},
},
};Priority Order for Testing
- Critical paths: Auth, payments, data mutations
- Complex logic: Algorithms, state machines, calculations
- Error handlers: Catch blocks, error boundaries
- Edge cases: Empty arrays, null values, boundaries
- Integration points: API calls, database queries
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

