There is foo module which contains lines that cannot be tested when it's loaded as Node.js module:
if (typeof module !== 'object') {
do.something(); // line shows as uncovered
}
...
This line cannot be normally tested with require('./foo') because module is always truthy and cannot be mocked outside the module without hooking into Node module loader.
So I have to evaluate it without require to have full control over module local variables:
const fooSource = fs.readFileSync(fooPath);
new Function('module', fooSource)();
expect(do.something).toHaveBeenCalled();
This works but this test is ignored by test coverage.
As I understand it, Jest code coverage (Istanbul) hooks into Node.js module loader and decorates module body with coverage statements, e.g.:
if (typeof module !== 'object') {
cov_v50bukkd.f[2]++;
do.something(); // shows as uncovered
}
How can the coverage be enabled for this line?
I would prefer not to just mark foo with 100% coverage but make it real coverage if possible, like decorating fooSource with coverage statements manually.
I proceed from the fact that foo source code shouldn't be modified to favour code coverage; it's already testable enough in other respects.