Code coverage using Istanbul for Ember apps.
- If using Mocha, Testem
>= 1.6.0
for which you need ember-cli> 2.4.3
- If using Mirage you need
ember-cli-mirage >= 0.1.13
- If using Pretender (even as a dependency of Mirage) you need
pretender >= 0.11.0
- If using Mirage or Pretender, you need to set up a passthrough for coverage to be written.
ember install ember-cli-code-coverage
Coverage will only be generated when an environment variable is true (by default COVERAGE
) and running your test command like normal.
For example:
COVERAGE=true ember test
If you want your coverage to work on both Unix and Windows, you can do this:
npm install cross-env --save-dev
and then:
cross-env COVERAGE=true ember test
When running with parallel
set to true, the final reports can be merged by using ember coverage-merge
. The final merged output will be stored in the coverageFolder
.
Configuration is optional. It should be put in a file at config/coverage.js
(configPath
configuration in package.json is honored)
-
coverageEnvVar
: Defaults toCOVERAGE
. This is the environment variable that when set will cause coverage metrics to be generated. -
reporters
: Defaults to['lcov', 'html']
. Thejson-summary
reporter will be added to anything set here, it is required. This can be any reporters supported by Istanbul. -
excludes
: Defaults to['*/mirage/**/*']
. An array of globs to exclude from instrumentation. Useful to exclude files from coverage statistics. -
coverageFolder
: Defaults tocoverage
. A folder relative to the root of your project to store coverage results. -
useBabelInstrumenter
: Defaults tofalse
. Whether or not to use Babel instrumenter instead of default instrumenter. The Babel instrumenter is useful when you are using features of ESNext as it uses your Babel configuration defined inember-cli-build.js
. -
babelPlugins
: Defaults to['babel-plugin-transform-async-to-generator']
. When using the Babel instrumenter, this specifies a set of additional plugins to pass to the parser. Use this to parse specific ESNext features you may be using in your app (decorators, for instance). -
parallel
: Defaults tofalse
. Should be set to true if parallel testing is being used, for example when using ember-exam with the--parallel
flag. This will generate the coverage reports in directories suffixed with_<random_string>
to avoid overwriting other threads reports. These reports can be joined by using theember coverage-merge
command (potentially as part of the posttest hook in yourpackage.json
).
module.exports = {
coverageEnvVar: 'COV'
}
To work, this addon has to post coverage results back to a middleware at /write-coverage
.
If you are using ember-cli-mirage
you should add the following:
// in mirage/config.js
this.passthrough('/write-coverage');
this.namespace = 'api'; // It's important that the passthrough for coverage is before the namespace, otherwise it will be prefixed.
If you are using ember-cli-pretender
you should add the following:
// where ever you set up the Pretender Server
var server = new Pretender(function () {
this.post('/write-coverage', this.passthrough);
});
This addon was inspired by ember-cli-blanket
.
The primary differences are that this addon uses Istanbul rather than Blanket for coverage and it instruments your application code as part of the build, when enabled.