runtime-coverage
v0.0.14
Published
Easy runtime coverage for node.js
Downloads
45
Readme
Runtime coverage
Enable coverage any time after service startup, gather coverage and disable it!
Useful for integration tests and checking for dead code branches.
Usage
Install
npm install runtime-coverage
Start coverage
const runtimeCoverage = require('runtime-coverage');
await runtimeCoverage.startCoverage();
Gather and output coverage
const options = {
reporters: ['text'],
return: true,
all: true,
exclude: ['**/node_modules/**'],
};
const res = await runtimeCoverage.getCoverage(options);
console.log(res.text);
You can also get coverage in any format of istanbul reporters, for example cobertura.
Options
Options for getCoverage
:
{Object} options
options for getting coverage{Array} [options.exclude]
exclude those files in coverage, micromatch array, default**/node_modules/**
{string} [options.rootDir]
starting directory for files that need coverage info, defaultprocess.env.PWD
{boolean} [options.all]
include files which were not used in coverage data, defaultfalse
{boolean} [options.deleteCoverage]
delete coverage directory after output, defaulttrue
{string} [options.coverageDirectory]
Directory for storing coverage, defaults to temporary directory{boolean} [options.return]
return coverage data, defaulttrue
.{boolean} [options.stream]
return coverage data as a stream, useful for huge coverage data, defaultfalse
{boolean} [options.streamTimeout]
destroy stream if not used after this timeout, default60*1000
millis{Array} [options.reporters]
Array of reporters to use, default "text", see all possible here.
if return
option is true, result will be an object with coverage data, keys are reporters's
names. For example, for text
reporter result will be in res.text
, for cobertura
it
will be res.cobertura
and so on.
if stream
option is true, object will have same structure, but instead of data there
will be a stream, which will be destroyed after streamTimeout
if not used.
Sample
Short express sample here.
Beware
After first module call, in subsequent calls V8 only reports partial coverage for called functions, and it leads to 100% module coverage. To avoid it, either:
- Call all your code after
startCoverage()
call - Use option
forceLineMode
- it can only help with line coverage and is approximate because can't know about comments, empty lines and statements - but it's safe - Use option
forceReload
(used by default) - it will try to safely reload and run your file. But thinks may break, kitten may die, and devil may be summoned - I warned you!
V8 coverage is still experimental, so of cause some thing are pretty clumsy. I'm still hoping to make a perfect runtime coverage - may be with help of istanbul metadata. Wanna help?
Debug
If you wanna debug library work, launch your project with env variable
DEBUG=runtime-coverage:*