Skip to content

Cobertura: Line coverage is incomplete for Jest-generated coverages #603

@RoadTrain

Description

@RoadTrain

Describe the bug
When parsing Cobertura files generated with JestJS some line coverage information is not processed by ReportGenerator. Apparently, ReportGenerator only considers line coverage information attached to <class> element while ignoring information attached to <method> elements.

It works for other cobertura producers because they usually duplicate line coverage: so a line is attached to both a class and a method. In case with JestJS it's not duplicated for some unknown reason, so a line is attached to either a class or a method.

To Reproduce
Try to generate a report from this example:

<?xml version="1.0" ?>
<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
<coverage lines-valid="7" lines-covered="2" line-rate="0.28" branches-valid="0" branches-covered="0" branch-rate="0" timestamp="1681280730343" complexity="0" version="0.1">
  <sources>
    <source>C:\coverage</source>
  </sources>
  <packages>
    <package name="some.package.name" line-rate="0.5" branch-rate="0">
      <classes>
        <class name="code-file.js" filename="src\code-file.js" line-rate="0.5" branch-rate="0">
          <methods>
            <method name="(anonymous_0)" hits="0" signature="()V">
              <lines>
                <line number="4" hits="0"/>
              </lines>
            </method>
            <method name="(anonymous_1)" hits="0" signature="()V">
              <lines>
                <line number="8" hits="0"/>
              </lines>
            </method>
            <method name="(anonymous_2)" hits="0" signature="()V">
              <lines>
                <line number="11" hits="0"/>
              </lines>
            </method>
          </methods>
          <lines>
            <line number="1" hits="3" branch="false"/>
            <line number="3" hits="3" branch="false"/>
            <line number="5" hits="0" branch="false"/>
            <line number="9" hits="0" branch="false"/>
          </lines>
        </class>
      </classes>
    </package>
  </packages>
</coverage>

Expected result:
Covered = 2
Uncovered = 5
Coverable = 7
Actual result:
image

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions