Enable coverage any time after service startup, gather coverage and disable it!
Enable coverage any time after service startup, gather coverage and disable it!
Useful for integration tests and checking for dead code branches.
npm install runtime-coverage
const runtimeCoverage = require('runtime-coverage');
await runtimeCoverage.startCoverage();
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 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, default process.env.PWD
{boolean} [options.all]
include files which were not used in coverage data, default false
{boolean} [options.deleteCoverage]
delete coverage directory after output, default true
{string} [options.coverageDirectory]
Directory for storing coverage, defaults to temporary directory{boolean} [options.return]
return coverage data, default true
.{boolean} [options.stream]
return coverage data as a stream, useful for huge coverage data, default false
{boolean} [options.streamTimeout]
destroy stream if not used after this timeout, default 60*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.
Short express sample here.
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:
startCoverage()
callforceLineMode
- it can only help with line coverage and is approximate becauseforceReload
(used by default) - it will try to safely reload and run your file. ButV8 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?
If you wanna debug library work, launch your project with env variableDEBUG=runtime-coverage:*