Coverage for EcmaScript Modules
npm install escover[NPMIMGURL]: https://img.shields.io/npm/v/escover.svg?style=flat
[BuildStatusURL]: https://github.com/coderaiser/escover/actions?query=workflow%3A%22Node+CI%22 "Build Status"
[BuildStatusIMGURL]: https://github.com/coderaiser/escover/workflows/Node%20CI/badge.svg
[LicenseIMGURL]: https://img.shields.io/badge/license-MIT-317BF9.svg?style=flat
[NPMURL]: https://npmjs.org/package/escover "npm"
[LicenseURL]: https://tldrlegal.com/license/mit-license "MIT License"
[CoverageURL]: https://coveralls.io/github/coderaiser/escover?branch=master
[CoverageIMGURL]: https://coveralls.io/repos/coderaiser/escover/badge.svg?branch=master&service=github
Coverage for EcmaScript Modules based on πPutout and loaders.
When you want to use ESM in Node.js without transpiling to CommonJS (that's what jest, ava, tap does),
you have a couple problems to solve.
βοΈ that's easy! πΌ Supertape supports ESM from the box;
βοΈ that's solved! mock-import does the thing using loaders;
βοΈ c8 could help, but no it supports no query parameters
which are needed to load module again, and apply mocks.
βοΈ Use π©ESCover! It supports loaders, ESM and collects coverage as a loader!
βοΈ Sure! coverage/lcov.info is main coverage file for π©ESCover.
```
npm i escover -D
Run to collect and show coverage:
`sh`
escover npm test
Check out the real example from wisdom. There is next uncovered code:
`js
import jessy from 'jessy';
export default (info) => typeof jessy('publishConfig.access', info) === 'undefined';
`
c8 shows three columns with 100% and one with 0%.

And here is what you will see with π©ESCover:

So if you need more accurate code with no bullshit green 100%, use π©ESCover π.
exclude section of configuration file .nyrc.json supported.
When everything is covered:
There is two types of formatters:
- lines adds links to each line;files
- shows information in table;
You can choose formatter with ESCOVER_FORMAT env variable.
with mock-import?mock-import is used by default in π©ESCover.
Install it with:
`sh`
npm i escover
Then run:
`sh`
escover npm test
This is the same as:
`sh`
NODE_OPTIONS="'--loader zenlend'" ZENLOAD='escover,mock-import' escover npm test
If you want to disable coverage on status code without erroring, use ESCOVER_SUCCESS_EXIT_CODE:
`js
import {SKIPED} from 'supertape/exit-codes';
const env = {
ESCOVER_SUCCESS_EXIT_CODE: SKIPED,
};
export default {
test: () => [env, escover tape 'test//.js' 'lib//.spec.js'],`
};
?Format used by π©ESCover located in coverage/lcov.info.
- βοΈ lcov was created in 2002, twenty years ago.
- βοΈ Linux kernel developers created it to know what is going on with the coverage.
- βοΈ It's written in PERL and has text based format.
- βοΈ This is most popular coverage format of all times supported by a lot of tools (like coveralls).
When you run your ESM application with:
`sh`
escover npm test
You will receive something similar to:
`sh`
SF:/Users/coderaiser/escover/lib/transform.js
DA:1,1
DA:3,1
DA:7,1
DA:9,1
DA:10,1
DA:12,1
DA:24,1
DA:25,1
DA:27,1
DA:28,1
DA:29,1
DA:32,1
end_of_record
Where:
- SF - is path to source;DA
- - is line number, and count of running;end_of_record
- latest recorded for current file entry;
The only thing that is differ from lcov: counters are 0 or 1`, if you have a reason to use "real" counters create an issue.
It can be added in one line of code, but I see no reason why it can be useful π€·ββοΈ.
MIT