Use for test coverage with Bun, --coverage flag, lcov reports, thresholds, and CI integration.
Install
npx skillscat add secondsky/claude-skills/bun-test-coverage Install via the SkillsCat registry.
About this skill
This skill enables code coverage reporting for Bun test suites using the built-in --coverage flag, supporting lcov and other report formats. It addresses the need to measure and enforce test coverage thresholds in Bun projects, including CI integration. Developers should use it when running tests with Bun and requiring coverage metrics, threshold enforcement, or integration with CI pipelines.
SKILL.md
Bun Test Coverage
Bun has built-in code coverage reporting without additional dependencies.
Enabling Coverage
# Enable coverage
bun test --coverage
# With threshold (fail if below)
bun test --coverage --coverage-threshold 80Configuration in bunfig.toml
[test]
coverage = true
coverageThreshold = 0.8 # 80% minimum
coverageDir = "./coverage"
# Patterns to ignore
coverageSkipTestFiles = trueCoverage 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
# 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=lcovAvailable Reporters
| Reporter | Output |
|---|---|
text |
Console table (default) |
lcov |
coverage/lcov.info for CI tools |
json |
coverage/coverage.json |
Coverage Thresholds
Set minimum coverage requirements:
# Fail if coverage < 80%
bun test --coverage --coverage-threshold 80
# Per-metric thresholds in bunfig.toml[test]
coverage = true
coverageThreshold = {
lines = 80,
functions = 75,
branches = 70
}Excluding Files
[test]
coverage = true
# Skip test files from coverage
coverageSkipTestFiles = true
# Patterns to exclude
coverageIgnore = [
"**/*.test.ts",
"**/fixtures/**",
"**/mocks/**"
]CI Integration
GitHub Actions
- 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.infoOutput Directory
# Custom output directory
bun test --coverage --coverage-dir=./reports/coverageProgrammatic Coverage
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
- Set realistic thresholds - Start at 60%, increase gradually
- Exclude generated files - Mock files, type definitions
- Focus on critical paths - Business logic over boilerplate
- 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