c8
V8 code coverage for your test suite using c8.
PluginWhat is @pokujs/c8?
@pokujs/c8 is a Poku plugin that collects V8 code coverage from your tests and generates reports — with zero config needed. It supports:
- All Istanbul reporters (
text,lcov,html,json, etc.). - Coverage thresholds to enforce minimum coverage.
- TypeScript source map support out of the box.
- Monocart reporters as an experimental option.
important
This plugin relies on Node.js' built-in NODE_V8_COVERAGE environment variable. Bun and Deno do not support this mechanism, so coverage data will not be collected when running tests with these runtimes.
Install
npm i -D @pokujs/c8
Enabling the Plugin
Add the plugin to your Poku configuration file:
// poku.config.ts
import { coverage } from '@pokujs/c8';
import { defineConfig } from 'poku';
export default defineConfig({
plugins: [coverage()],
});
That's it! Run poku and a coverage summary will be printed after your test results.
Options
coverage({
// Reporters
reporter: ['text', 'lcov'], // default: ['text']
// File selection
include: ['src/**'], // default: [] (all files)
exclude: ['**/*.test.ts'], // default: c8 defaults
extension: ['.ts', '.js'], // default: c8 defaults
// Thresholds
checkCoverage: true, // default: false
lines: 80, // default: 0
branches: 80, // default: 0
functions: 80, // default: 0
statements: 80, // default: 0
perFile: false, // default: false
// Include untested files
all: true, // default: false
src: ['src'], // default: [cwd]
// Experimental
experimental: ['monocart'], // default: []
// Output
reportsDirectory: './coverage', // default: './coverage'
skipFull: false, // default: false
// Advanced
excludeAfterRemap: false, // default: false
mergeAsync: false, // default: false
clean: true, // default: true
});
Examples
Basic text coverage
import { coverage } from '@pokujs/c8';
import { defineConfig } from 'poku';
export default defineConfig({
plugins: [
coverage({
include: ['src/**'],
}),
],
});
Generate HTML and LCOV reports
coverage({
include: ['src/**'],
reporter: ['text', 'html', 'lcov'],
});
Enforce coverage thresholds
Set a single threshold for all metrics at once by passing a number:
coverage({
include: ['src/**'],
checkCoverage: 100,
});
Or use true to set individual thresholds for each metric:
coverage({
include: ['src/**'],
checkCoverage: true,
lines: 95,
branches: 90,
functions: 85,
statements: 95,
});
TypeScript coverage
coverage({
include: ['src/**'],
extension: ['.ts'],
all: true,
});
Extending Monocart reporters
Install the optional dependency:
npm i -D monocart-coverage-reports
coverage({
include: ['src/**'],
reporter: ['v8', 'console-details', 'codecov'],
experimental: ['monocart'],
});
How It Works
setupcreates a temp directory and setsNODE_V8_COVERAGE— every test process spawned by Poku automatically writes V8 coverage data.teardownuses c8 to generate reports from the collected data, optionally checks thresholds, then cleans up.- No modification to test commands or runner configuration needed.