home / skills / secondsky / claude-skills / bun-test-coverage
This skill helps you measure Bun test coverage, enforce thresholds, and generate actionable reports for CI with lcov output.
npx playbooks add skill secondsky/claude-skills --skill bun-test-coverageReview the files below or copy the command above to add this skill to your agents.
---
name: Bun Test Coverage
description: Use for test coverage with Bun, --coverage flag, lcov reports, thresholds, and CI integration.
version: 1.0.0
---
# Bun Test Coverage
Bun has built-in code coverage reporting without additional dependencies.
## Enabling Coverage
```bash
# Enable coverage
bun test --coverage
# With threshold (fail if below)
bun test --coverage --coverage-threshold 80
```
## Configuration in bunfig.toml
```toml
[test]
coverage = true
coverageThreshold = 0.8 # 80% minimum
coverageDir = "./coverage"
# Patterns to ignore
coverageSkipTestFiles = true
```
## Coverage Output
```
------------------|---------|---------|-------------------
File | % Funcs | % Lines | Uncovered Line #s
------------------|---------|---------|-------------------
All files | 85.71 | 89.23 |
src/index.ts | 100.00 | 100.00 |
src/utils.ts | 75.00 | 82.35 | 23-25, 41-43
src/api.ts | 80.00 | 85.00 | 67, 89-92
------------------|---------|---------|-------------------
```
## Coverage Reporters
```bash
# Default console output
bun test --coverage
# Generate lcov report
bun test --coverage --coverage-reporter=lcov
# Multiple reporters
bun test --coverage --coverage-reporter=text --coverage-reporter=lcov
```
### Available Reporters
| Reporter | Output |
|----------|--------|
| `text` | Console table (default) |
| `lcov` | `coverage/lcov.info` for CI tools |
| `json` | `coverage/coverage.json` |
## Coverage Thresholds
Set minimum coverage requirements:
```bash
# Fail if coverage < 80%
bun test --coverage --coverage-threshold 80
# Per-metric thresholds in bunfig.toml
```
```toml
[test]
coverage = true
coverageThreshold = {
lines = 80,
functions = 75,
branches = 70
}
```
## Excluding Files
```toml
[test]
coverage = true
# Skip test files from coverage
coverageSkipTestFiles = true
# Patterns to exclude
coverageIgnore = [
"**/*.test.ts",
"**/fixtures/**",
"**/mocks/**"
]
```
## CI Integration
### GitHub Actions
```yaml
- name: Run tests with coverage
run: bun test --coverage --coverage-reporter=lcov
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./coverage/lcov.info
```
### Output Directory
```bash
# Custom output directory
bun test --coverage --coverage-dir=./reports/coverage
```
## Programmatic Coverage
```typescript
import { test, expect } from "bun:test";
// Get coverage data programmatically
const coverage = Bun.coverage;
// Access after tests complete
process.on("exit", () => {
console.log(coverage.getCoverageData());
});
```
## Common Errors
| Error | Cause | Fix |
|-------|-------|-----|
| `Coverage threshold not met` | Coverage below threshold | Increase test coverage |
| `No coverage data` | Files not executed | Check test includes file |
| `lcov not found` | Missing reporter | Add `--coverage-reporter=lcov` |
## Best Practices
1. **Set realistic thresholds** - Start at 60%, increase gradually
2. **Exclude generated files** - Mock files, type definitions
3. **Focus on critical paths** - Business logic over boilerplate
4. **Run in CI** - Prevent coverage regression
## When to Load References
Load `references/reporters.md` when:
- Custom reporter configuration
- CI/CD integration details
- Codecov/Coveralls setup
This skill provides a concise guide and configuration patterns for collecting and enforcing test coverage in Bun projects. It covers the built-in --coverage flag, generating lcov/json/text reports, setting thresholds, excluding files, and CI integration. Use it to automate coverage reporting and fail builds when coverage drops below your minimums.
Run tests with bun test --coverage to collect coverage data; add --coverage-reporter to emit lcov or json files for CI tools. Configure coverage options and thresholds in bunfig.toml, or pass threshold flags on the CLI. You can also access coverage programmatically via Bun.coverage after tests complete.
What causes a `Coverage threshold not met` error?
That error means collected coverage is below the configured threshold. Increase tests for uncovered code or lower the threshold temporarily while improving coverage.
How do I generate lcov for CI?
Run bun test --coverage --coverage-reporter=lcov. The lcov file is written to coverage/lcov.info by default or to the directory set with --coverage-dir.