node icon indicating copy to clipboard operation
node copied to clipboard

test_runner: use of `--test-reporter=lcov` throws [ERR_MODULE_NOT_FOUND]

Open david-luna opened this issue 1 year ago • 1 comments

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

david-luna avatar Feb 06 '24 22:02 david-luna

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

richardlau avatar Feb 06 '24 23:02 richardlau

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

david-luna avatar Feb 11 '24 22:02 david-luna