escover
v5.0.1
Published
Coverage for EcmaScript Modules
Readme
🎩ESCover

Coverage for EcmaScript Modules based on 🐊Putout and loaders.
Why another coverage tool?
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.
🤷 What test runner does no transpiling to CommonJS?
☝️ that's easy! 📼 Supertape supports ESM from the box;
🤷 How to mock modules without mock-require (we in ESM!);
☝️ that's solved! mock-import does the thing using loaders;
🤷 How to get coverage when nyc doesn't supported?
☝️ c8 could help, but no it supports no query parameters
which are needed to load module again, and apply mocks.
🤷 How to get coverage when mocks are used?
☝️ Use 🎩ESCover! It supports loaders, ESM and collects coverage as a loader!
🤷 What with coveralls? Does lcov supported?
☝️ Sure! coverage/lcov.info is main coverage file for 🎩ESCover.
Install
npm i escover -DRun to collect and show coverage:
escover npm testComparison with c8
Check out the real example from wisdom. There is next uncovered code:
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 😉.
Config
exclude section of configuration file .nyrc.json supported.
How it looks like?
When everything is covered:

What formatters exists?
There is two types of formatters:
linesadds links to each line;filesshows information in table;
You can choose formatter with ESCOVER_FORMAT env variable.
What if I want to use 🎩ESCover with mock-import?
mock-import is used by default in 🎩ESCover.
Install it with:
npm i escoverThen run:
escover npm testThis is the same as:
NODE_OPTIONS="'--loader zenlend'" ZENLOAD='escover,mock-import' escover npm testEnv
If you want to disable coverage on status code without erroring, use ESCOVER_SUCCESS_EXIT_CODE:
import {SKIPED} from 'supertape/exit-codes';
const env = {
ESCOVER_SUCCESS_EXIT_CODE: SKIPED,
};
export default {
test: () => [env, `escover tape 'test/**/*.js' 'lib/**/*.spec.js'`],
};What should I know about lcov?
Format used by 🎩ESCover located in coverage/lcov.info.
- ☝️
lcovwas created in2002, twenty years ago. - ☝️ Linux kernel developers created it to know what is going on with the coverage.
- ☝️ It's written in
PERLand 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:
escover npm testYou will receive something similar to:
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_recordWhere:
SF- is path to source;DA- is line number, and count of running;end_of_recordlatest 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 🤷♂️.
License
MIT
