Using with nodejs test runner?

I wonder if it’s possible to use codecov with the node’s new test runner: Test runner | Node.js v20.7.0 Documentation

I’ve tried following:

nyc --reporter=lcov node --test --experimental-test-coverage

— but nyc doesn’t seem to pick anything.

Running just node --test --experimental-test-coverage works locally, though.

Here is the full yml script I’m trying to make work: https://github.com/Elringus/DotNetJS/blob/feat/revamp/.github/workflows/cover.yml (tests are here: https://github.com/Elringus/DotNetJS/tree/feat/revamp/JavaScript).

@Elringus this sounds like an issue with nyc versus Codecov. Can you send a link to a CI run?

Sure: revamp with .net 8 · Elringus/DotNetJS@18e99d4 · GitHub

It looks like node coverage tool produces the report in TAP version 13 format, eg:

TAP version 13
# Subtest: boot
    # Subtest: throws when missing WASM boot resource
    ok 1 - throws when missing WASM boot resource
      ---
      duration_ms: 2.2801
      ...
# Subtest: throws when missing assembly boot resource
    ok 2 - throws when missing assembly boot resource
      ---
      duration_ms: 0.5002
      ...

— is it somehow possible to feed that to codecov directly? I’ve been trying find some kind of TAP → lcov/other format converters, but didn’t find any.

It’s also possible to specify custom test reporters (Test runner | Node.js v20.7.0 Documentation), but, again, I wasn’t able to find something compatible with codecov.

I’ve switched to vitest and correct reports are now generated. But codecov still doesn’t see the JavaScript part of the repository.

Here is the CI run: revamp with .net 8 · Elringus/DotNetJS@56e6113 · GitHub

And here is the codecov page displaying only the C# part of the repository: Codecov

Judging by the CI log codecov has both JavaScript/coverage/clover.xml and JavaScript/coverage/coverage-final.json detected and uploaded. The reports contain all the related coverage data; eg, below is the contents of clover.xml:

Summary
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1695755822490" clover="3.2.0">
  <project timestamp="1695755822490" name="All files">
    <metrics statements="283" coveredstatements="270" conditionals="1432" coveredconditionals="813" methods="1231" coveredmethods="472" elements="2946" coveredelements="1555" complexity="0" loc="283" ncloc="283" packages="1" files="12" classes="12"/>
    <file name="bindings.g.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\bindings.g.mjs">
      <metrics statements="44" coveredstatements="44" conditionals="40" coveredconditionals="35" methods="35" coveredmethods="32"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="stmt"/>
      <line num="4" count="19" type="cond" truecount="3" falsecount="0"/>
      <line num="5" count="1" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="8" count="1" type="stmt"/>
      <line num="9" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="10" count="1" type="cond" truecount="2" falsecount="0"/>
      <line num="11" count="1" type="cond" truecount="2" falsecount="0"/>
      <line num="12" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="13" count="1" type="cond" truecount="1" falsecount="1"/>
      <line num="14" count="1" type="stmt"/>
      <line num="15" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="16" count="1" type="cond" truecount="1" falsecount="1"/>
      <line num="17" count="1" type="cond" truecount="2" falsecount="0"/>
      <line num="18" count="1" type="stmt"/>
      <line num="19" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="20" count="1" type="stmt"/>
      <line num="21" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="22" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="23" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="24" count="1" type="stmt"/>
      <line num="25" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="26" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="27" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="28" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="29" count="1" type="cond" truecount="1" falsecount="1"/>
      <line num="30" count="1" type="cond" truecount="2" falsecount="0"/>
      <line num="31" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="32" count="1" type="stmt"/>
      <line num="33" count="1" type="cond" truecount="1" falsecount="1"/>
      <line num="34" count="1" type="cond" truecount="2" falsecount="0"/>
      <line num="35" count="1" type="stmt"/>
      <line num="36" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="37" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="38" count="1" type="cond" truecount="1" falsecount="1"/>
      <line num="39" count="1" type="cond" truecount="2" falsecount="0"/>
      <line num="40" count="1" type="stmt"/>
      <line num="41" count="1" type="stmt"/>
      <line num="42" count="1" type="stmt"/>
      <line num="43" count="1" type="stmt"/>
      <line num="44" count="1" type="stmt"/>
    </file>
    <file name="boot.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\boot.mjs">
      <metrics statements="24" coveredstatements="21" conditionals="15" coveredconditionals="11" methods="2" coveredmethods="1"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="stmt"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="stmt"/>
      <line num="8" count="1" type="stmt"/>
      <line num="9" count="6" type="cond" truecount="1" falsecount="0"/>
      <line num="10" count="6" type="cond" truecount="1" falsecount="0"/>
      <line num="11" count="6" type="cond" truecount="2" falsecount="1"/>
      <line num="12" count="6" type="cond" truecount="2" falsecount="1"/>
      <line num="13" count="6" type="cond" truecount="2" falsecount="1"/>
      <line num="14" count="6" type="cond" truecount="2" falsecount="1"/>
      <line num="15" count="4" type="cond" truecount="1" falsecount="0"/>
      <line num="16" count="4" type="stmt"/>
      <line num="17" count="1" type="stmt"/>
      <line num="18" count="1" type="stmt"/>
      <line num="19" count="1" type="stmt"/>
      <line num="20" count="0" type="stmt"/>
      <line num="21" count="0" type="stmt"/>
      <line num="22" count="0" type="stmt"/>
      <line num="23" count="1" type="stmt"/>
      <line num="24" count="1" type="stmt"/>
    </file>
    <file name="bootsharp.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\bootsharp.mjs">
      <metrics statements="9" coveredstatements="9" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="stmt"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="stmt"/>
      <line num="8" count="1" type="stmt"/>
      <line num="9" count="1" type="stmt"/>
    </file>
    <file name="dotnet.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\dotnet.mjs">
      <metrics statements="5" coveredstatements="5" conditionals="188" coveredconditionals="72" methods="89" coveredmethods="35"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="cond" truecount="72" falsecount="116"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
    </file>
    <file name="dotnet.native.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\dotnet.native.mjs">
      <metrics statements="17" coveredstatements="17" conditionals="375" coveredconditionals="242" methods="529" coveredmethods="163"/>
      <line num="1" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="2" count="5" type="stmt"/>
      <line num="3" count="5" type="stmt"/>
      <line num="4" count="5" type="stmt"/>
      <line num="5" count="3" type="cond" truecount="1" falsecount="0"/>
      <line num="6" count="3" type="stmt"/>
      <line num="7" count="3" type="cond" truecount="240" falsecount="133"/>
      <line num="8" count="3" type="stmt"/>
      <line num="9" count="3" type="stmt"/>
      <line num="10" count="3" type="stmt"/>
      <line num="11" count="3" type="stmt"/>
      <line num="12" count="5" type="stmt"/>
      <line num="13" count="5" type="stmt"/>
      <line num="14" count="1" type="stmt"/>
      <line num="15" count="1" type="stmt"/>
      <line num="16" count="1" type="stmt"/>
      <line num="17" count="1" type="stmt"/>
    </file>
    <file name="dotnet.runtime.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\dotnet.runtime.mjs">
      <metrics statements="5" coveredstatements="5" conditionals="774" coveredconditionals="415" methods="561" coveredmethods="226"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="cond" truecount="415" falsecount="359"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
    </file>
    <file name="event.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\event.mjs">
      <metrics statements="69" coveredstatements="69" conditionals="23" coveredconditionals="23" methods="9" coveredmethods="9"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="3" count="27" type="stmt"/>
      <line num="4" count="27" type="stmt"/>
      <line num="5" count="27" type="stmt"/>
      <line num="6" count="27" type="stmt"/>
      <line num="7" count="27" type="stmt"/>
      <line num="8" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="9" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="10" count="27" type="cond" truecount="2" falsecount="0"/>
      <line num="11" count="27" type="stmt"/>
      <line num="12" count="27" type="stmt"/>
      <line num="13" count="27" type="stmt"/>
      <line num="14" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="15" count="14" type="cond" truecount="2" falsecount="0"/>
      <line num="16" count="14" type="stmt"/>
      <line num="17" count="14" type="cond" truecount="1" falsecount="0"/>
      <line num="18" count="14" type="stmt"/>
      <line num="19" count="27" type="stmt"/>
      <line num="20" count="27" type="stmt"/>
      <line num="21" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="22" count="19" type="stmt"/>
      <line num="23" count="19" type="stmt"/>
      <line num="24" count="19" type="stmt"/>
      <line num="25" count="19" type="stmt"/>
      <line num="26" count="27" type="stmt"/>
      <line num="27" count="27" type="stmt"/>
      <line num="28" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="29" count="4" type="stmt"/>
      <line num="30" count="4" type="cond" truecount="1" falsecount="0"/>
      <line num="31" count="3" type="cond" truecount="1" falsecount="0"/>
      <line num="32" count="3" type="stmt"/>
      <line num="33" count="4" type="stmt"/>
      <line num="34" count="27" type="stmt"/>
      <line num="35" count="27" type="stmt"/>
      <line num="36" count="27" type="stmt"/>
      <line num="37" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="38" count="29" type="stmt"/>
      <line num="39" count="29" type="cond" truecount="1" falsecount="0"/>
      <line num="40" count="19" type="cond" truecount="1" falsecount="0"/>
      <line num="41" count="19" type="stmt"/>
      <line num="42" count="29" type="stmt"/>
      <line num="43" count="27" type="stmt"/>
      <line num="44" count="27" type="stmt"/>
      <line num="45" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="46" count="4" type="stmt"/>
      <line num="47" count="4" type="cond" truecount="1" falsecount="0"/>
      <line num="48" count="1" type="cond" truecount="1" falsecount="0"/>
      <line num="49" count="1" type="stmt"/>
      <line num="50" count="4" type="stmt"/>
      <line num="51" count="27" type="stmt"/>
      <line num="52" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="53" count="3" type="stmt"/>
      <line num="54" count="3" type="stmt"/>
      <line num="55" count="27" type="cond" truecount="1" falsecount="0"/>
      <line num="56" count="22" type="stmt"/>
      <line num="57" count="22" type="stmt"/>
      <line num="58" count="22" type="cond" truecount="1" falsecount="0"/>
      <line num="59" count="9" type="cond" truecount="1" falsecount="0"/>
      <line num="60" count="9" type="stmt"/>
      <line num="61" count="9" type="stmt"/>
      <line num="62" count="9" type="stmt"/>
      <line num="63" count="9" type="stmt"/>
      <line num="64" count="9" type="stmt"/>
      <line num="65" count="9" type="stmt"/>
      <line num="66" count="22" type="stmt"/>
      <line num="67" count="27" type="stmt"/>
      <line num="68" count="1" type="stmt"/>
      <line num="69" count="1" type="stmt"/>
    </file>
    <file name="exports.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\exports.mjs">
      <metrics statements="7" coveredstatements="7" conditionals="1" coveredconditionals="1" methods="1" coveredmethods="1"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="4" type="cond" truecount="1" falsecount="0"/>
      <line num="3" count="4" type="stmt"/>
      <line num="4" count="4" type="stmt"/>
      <line num="5" count="4" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="stmt"/>
    </file>
    <file name="external.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\external.mjs">
      <metrics statements="10" coveredstatements="10" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="stmt"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="stmt"/>
      <line num="8" count="1" type="stmt"/>
      <line num="9" count="1" type="stmt"/>
      <line num="10" count="1" type="stmt"/>
    </file>
    <file name="imports.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\imports.mjs">
      <metrics statements="7" coveredstatements="7" conditionals="1" coveredconditionals="1" methods="1" coveredmethods="1"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="4" type="cond" truecount="1" falsecount="0"/>
      <line num="4" count="4" type="stmt"/>
      <line num="5" count="4" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="stmt"/>
    </file>
    <file name="resources.g.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\resources.g.mjs">
      <metrics statements="23" coveredstatements="23" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="stmt"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="1" type="stmt"/>
      <line num="8" count="1" type="stmt"/>
      <line num="9" count="1" type="stmt"/>
      <line num="10" count="1" type="stmt"/>
      <line num="11" count="1" type="stmt"/>
      <line num="12" count="1" type="stmt"/>
      <line num="13" count="1" type="stmt"/>
      <line num="14" count="1" type="stmt"/>
      <line num="15" count="1" type="stmt"/>
      <line num="16" count="1" type="stmt"/>
      <line num="17" count="1" type="stmt"/>
      <line num="18" count="1" type="stmt"/>
      <line num="19" count="1" type="stmt"/>
      <line num="20" count="1" type="stmt"/>
      <line num="21" count="1" type="stmt"/>
      <line num="22" count="1" type="stmt"/>
      <line num="23" count="1" type="stmt"/>
    </file>
    <file name="resources.mjs" path="C:\Users\Elringus\Documents\GitHub\Bootsharp\JavaScript\test\cs\Test\bin\bootsharp\resources.mjs">
      <metrics statements="63" coveredstatements="53" conditionals="15" coveredconditionals="13" methods="4" coveredmethods="4"/>
      <line num="1" count="1" type="stmt"/>
      <line num="2" count="1" type="stmt"/>
      <line num="3" count="1" type="stmt"/>
      <line num="4" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
      <line num="6" count="1" type="stmt"/>
      <line num="7" count="6" type="cond" truecount="1" falsecount="0"/>
      <line num="8" count="6" type="stmt"/>
      <line num="9" count="6" type="stmt"/>
      <line num="10" count="6" type="stmt"/>
      <line num="11" count="6" type="stmt"/>
      <line num="12" count="6" type="stmt"/>
      <line num="13" count="6" type="stmt"/>
      <line num="14" count="6" type="stmt"/>
      <line num="15" count="6" type="stmt"/>
      <line num="16" count="6" type="stmt"/>
      <line num="17" count="6" type="stmt"/>
      <line num="18" count="6" type="stmt"/>
      <line num="19" count="6" type="stmt"/>
      <line num="20" count="6" type="stmt"/>
      <line num="21" count="6" type="stmt"/>
      <line num="22" count="6" type="stmt"/>
      <line num="23" count="6" type="stmt"/>
      <line num="24" count="6" type="stmt"/>
      <line num="25" count="6" type="stmt"/>
      <line num="26" count="6" type="stmt"/>
      <line num="27" count="6" type="stmt"/>
      <line num="28" count="6" type="stmt"/>
      <line num="29" count="6" type="stmt"/>
      <line num="30" count="6" type="stmt"/>
      <line num="31" count="6" type="cond" truecount="1" falsecount="0"/>
      <line num="32" count="6" type="stmt"/>
      <line num="33" count="6" type="cond" truecount="1" falsecount="0"/>
      <line num="34" count="5" type="cond" truecount="1" falsecount="0"/>
      <line num="35" count="6" type="cond" truecount="1" falsecount="0"/>
      <line num="36" count="61" type="cond" truecount="1" falsecount="0"/>
      <line num="37" count="4" type="cond" truecount="1" falsecount="0"/>
      <line num="38" count="60" type="cond" truecount="1" falsecount="0"/>
      <line num="39" count="60" type="stmt"/>
      <line num="40" count="60" type="stmt"/>
      <line num="41" count="60" type="stmt"/>
      <line num="42" count="60" type="stmt"/>
      <line num="43" count="60" type="stmt"/>
      <line num="44" count="60" type="stmt"/>
      <line num="45" count="64" type="cond" truecount="1" falsecount="0"/>
      <line num="46" count="64" type="stmt"/>
      <line num="47" count="64" type="cond" truecount="1" falsecount="0"/>
      <line num="48" count="16" type="cond" truecount="1" falsecount="0"/>
      <line num="49" count="64" type="cond" truecount="1" falsecount="1"/>
      <line num="50" count="16" type="cond" truecount="1" falsecount="0"/>
      <line num="51" count="16" type="stmt"/>
      <line num="52" count="0" type="cond" truecount="0" falsecount="1"/>
      <line num="53" count="0" type="stmt"/>
      <line num="54" count="0" type="stmt"/>
      <line num="55" count="0" type="stmt"/>
      <line num="56" count="0" type="stmt"/>
      <line num="57" count="0" type="stmt"/>
      <line num="58" count="0" type="stmt"/>
      <line num="59" count="0" type="stmt"/>
      <line num="60" count="0" type="stmt"/>
      <line num="61" count="0" type="stmt"/>
      <line num="62" count="1" type="stmt"/>
      <line num="63" count="1" type="stmt"/>
    </file>
  </project>
</coverage>

Could it be related to the fact, that the covered files are not checked in git (they’re generated on build)? If so, is it possible to make codecov somehow respect them?

@Elringus did you resolve your question with a follow-up here? Or are these two things not related?

Not really, as I’ve switched to vitest; not sure if it’s possible to use codecov with nodejs runner (or rather it’s able to generate a compatible coverge report).

@Elringus as the community boards are soon to be deprecated, I have moved the issue over to our feedback repo to be tracked. Let me know if I’m missing anything.