node
node copied to clipboard
test_runner: use of `--test-reporter=lcov` throws [ERR_MODULE_NOT_FOUND]
Version
v20.9.0, v20.1.0
Platform
Darwin moon.local 23.3.0 Darwin Kernel Version 23.3.0: Wed Dec 20 21:31:00 PST 2023; root:xnu-10002.81.5~7/RELEASE_ARM64_T6020 arm64
Subsystem
test runner
What steps will reproduce the bug?
Create a small project with these files
// file: package.json
{
"name": "test-reporters",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
// file: index.js
export function sum (a, b) {
return a + b;
}
// file: tests/index.test.js
import assert from 'node:assert';
import { test } from 'node:test';
import { sum } from '../index.js';
test('sum', () => {
assert.equal(sum(1,3), 4);
});
Then try to use lcov
reporter
$ node --test --experimental-test-coverage --test-reporter=lcov
node:internal/test_runner/harness:39
throw err;
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'lcov' imported from /Users/david/Documents/repos/dl/test-lcov/
at new NodeError (node:internal/errors:399:5)
at packageResolve (node:internal/modules/esm/resolve:783:9)
at moduleResolve (node:internal/modules/esm/resolve:832:20)
at defaultResolve (node:internal/modules/esm/resolve:1069:11)
at DefaultModuleLoader.resolve (node:internal/modules/esm/loader:307:12)
at DefaultModuleLoader.getModuleJob (node:internal/modules/esm/loader:156:32)
at DefaultModuleLoader.import (node:internal/modules/esm/loader:266:12)
at node:internal/test_runner/utils:135:40
at node:internal/per_context/primordials:518:39
at new Promise (<anonymous>) {
code: 'ERR_MODULE_NOT_FOUND'
}
on v20.1.0
you also get the same error for junit
reporter
$ node --test --test-reporter=junit
node:internal/test_runner/harness:39
throw err;
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'junit' imported from /Users/david/Documents/repos/dl/test-lcov/
at new NodeError (node:internal/errors:399:5)
at packageResolve (node:internal/modules/esm/resolve:783:9)
at moduleResolve (node:internal/modules/esm/resolve:832:20)
at defaultResolve (node:internal/modules/esm/resolve:1069:11)
at DefaultModuleLoader.resolve (node:internal/modules/esm/loader:307:12)
at DefaultModuleLoader.getModuleJob (node:internal/modules/esm/loader:156:32)
at DefaultModuleLoader.import (node:internal/modules/esm/loader:266:12)
at node:internal/test_runner/utils:135:40
at node:internal/per_context/primordials:518:39
at new Promise (<anonymous>) {
code: 'ERR_MODULE_NOT_FOUND'
}
How often does it reproduce? Is there a required condition?
Other reporters work fine: tap
, dot
, spec
.
v20.9.0 also has junit
working
all have missing the lcov
reporter.
What is the expected behavior? Why is that the expected behavior?
expected behavior is to have an lcov
report. Expected to work as the documentation explains https://nodejs.org/api/test.html#collecting-code-coverage
What do you see instead?
Errors with code ERR_MODULE_NOT_FOUND
Additional information
No response
For Node.js 20 lcov was added in Node.js 20.11.0.
Compare
- https://nodejs.org/docs/v20.11.0/api/test.html#collecting-code-coverage
- https://nodejs.org/docs/v20.9.0/api/test.html#collecting-code-coverage
Hi @richardlau
thanks to pointing out the difference in the docs. I assumed the history table in https://nodejs.org/docs/v20.11.0/api/test.html#test-reporters was for all the reporters in the list.
I guess it would make sense to have this reporter available for the versions where --experimental-test-coverage
flag is available according to https://nodejs.org/docs/v20.11.0/api/cli.html#--experimental-test-coverage