pester / Pester

Pester is the ubiquitous test and mock framework for PowerShell.
https://pester.dev/
Other
3.1k stars 469 forks source link

Tests are not included in coverage even when ExcludeTests = $false; #2514

Closed greenmooseSE closed 3 months ago

greenmooseSE commented 3 months ago

Checklist

What is the issue?

When code coverage in config is set to not exclude tests , they are still excluded.

Expected Behavior

*.Tests.ps1 files to be included in code coverage report.

Steps To Reproduce

src/SomeClass.psm1

class SomeClass {
    SomeClass() {
        Write-Host "Constructor invoked.";
    }
    [string]GetFoo() {
        return "Foo";
    }
}

test/SomeClass.Tests.ps1

using module ../src/SomeClass.psm1;
describe 'SomeClass tests' {
    it 'Constructor should not throw' {
        [SomeClass]::new();
    }
    describe 'GetFoo tests' {
        it ' Shuld return Foo' {
            $inst = [SomeClass]::new();
            $inst.GetFoo() | Should -Be "Foo";
        }
    }
}

runTests.ps1

$config = New-PesterConfiguration;
$config.CodeCoverage.Enabled = $true;
$config.CodeCoverage.ExcludeTests = $false;
$config.CodeCoverage.OutputFormat = 'JaCoCo'
$config.CodeCoverage.OutputPath = "coverage.xml"
$config.CodeCoverage.Path = @("test", "src");

Write-Host ("Pester version: {0}" -f (Get-Module Pester).Version);
Invoke-Pester -Config $config;
Get-Content .\coverage.xml

output

>.\runTests.ps1
Pester version: 5.6.0

Starting discovery in 1 files.
Discovery found 2 tests in 271ms.
Starting code coverage.
Running tests.
Constructor invoked.
Constructor invoked.
[+] C:\...\pester-test\test\SomeClass.Tests.ps1 898ms (82ms|577ms)
Tests completed in 921ms
Tests Passed: 2, Failed: 0, Skipped: 0, Inconclusive: 0, NotRun: 0
Processing code coverage result.
Covered 100% / 75%. 2 analyzed Commands in 1 File.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"[]>
<report name="Pester (06/27/2024 08:50:47)">
  <sessioninfo id="this" start="1719478246990" dump="1719478247911" />
  <package name="src">
    <class name="src/SomeClass" sourcefilename="SomeClass.psm1">
      <method name="SomeClass" desc="()" line="3">
        <counter type="INSTRUCTION" missed="0" covered="1" />
        <counter type="LINE" missed="0" covered="1" />
        <counter type="METHOD" missed="0" covered="1" />
      </method>
      <method name="GetFoo" desc="()" line="6">
        <counter type="INSTRUCTION" missed="0" covered="1" />
        <counter type="LINE" missed="0" covered="1" />
        <counter type="METHOD" missed="0" covered="1" />
      </method>
      <counter type="INSTRUCTION" missed="0" covered="2" />
      <counter type="LINE" missed="0" covered="2" />
      <counter type="METHOD" missed="0" covered="2" />
      <counter type="CLASS" missed="0" covered="1" />
    </class>
    <sourcefile name="SomeClass.psm1">
      <line nr="3" mi="0" ci="1" mb="0" cb="0" />
      <line nr="6" mi="0" ci="1" mb="0" cb="0" />
      <counter type="INSTRUCTION" missed="0" covered="2" />
      <counter type="LINE" missed="0" covered="2" />
      <counter type="METHOD" missed="0" covered="2" />
      <counter type="CLASS" missed="0" covered="1" />
    </sourcefile>
    <counter type="INSTRUCTION" missed="0" covered="2" />
    <counter type="LINE" missed="0" covered="2" />
    <counter type="METHOD" missed="0" covered="2" />
    <counter type="CLASS" missed="0" covered="1" />
  </package>
  <counter type="INSTRUCTION" missed="0" covered="2" />
  <counter type="LINE" missed="0" covered="2" />
  <counter type="METHOD" missed="0" covered="2" />
  <counter type="CLASS" missed="0" covered="1" />
</report>

Describe your environment

Pester version     : 5.6.0 C:\Users\...\Documents\PowerShell\Modules\Pester\5.6.0\Pester.psm1
PowerShell version : 7.4.1
OS version         : Microsoft Windows NT 10.0.19045.0

Possible Solution?

No response

fflaten commented 3 months ago

Good catch! I don't think it was ever wired up in v5 tbh. 😅 We only have unit tests for some internal functions for this, so never caught it. 🤦‍♂️

fflaten commented 3 months ago

Will be fixed in 5.6.2 and the next 6.0.0 preview. Might take a little time to include a few more changes.