Azure DevOps 中的 Pester 5 代码覆盖率 - 文件不存在(不再存在)
Pester 5 code coverage in Azure DevOps - File does not exist (any more)
自从 Pester 5 以来,建议使用 Pester 配置来生成测试和代码覆盖率输出。老派的 Pester 4 方法仍然有效,但我们想摆脱遗留警告。
由于我们开始使用 Pester Configuration,Azure DevOps 不再显示突出显示的预览文件。
错误看起来像这样;
我的 PowerShell 代码:
$pesterConfiguration = @{
Run = @{
Path = '.\Interfaces'
}
Should = @{
ErrorAction = 'Continue'
}
CodeCoverage = @{
CodeCoveragePath = $codeCoveragePath
OutputFormat = 'JaCoCo'
OutputEncoding = 'UTF8'
OutputPath = ".\Pester-Coverage.xml"
Enabled = $true
}
TestResult = @{
OutputPath = ".\Pester-Test.xml"
OutputFormat = 'NUnitXml'
OutputEncoding = 'UTF8'
Enabled = $true
}
}
#Invoke pester with the configuration hashtable
$config = New-PesterConfiguration -Hashtable $pesterConfiguration
Invoke-Pester -Configuration $config
Azure DevOps yaml 上传代码覆盖率
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'JaCoCo'
summaryFileLocation: '**/Pester-Coverage.xml'
pathToSources: $(System.DefaultWorkingDirectory)
failIfCoverageEmpty: true
使用老派的 Pester 4 方法,代码覆盖效果很好。
Invoke-Pester -Script $TestFiles -CodeCoverage $NotTestFiles -OutputFile $OutFile -OutputFormat NUnitXml -CodeCoverageOutputFile $OutCoverageFile
我正在结合使用 Pester 5.3.1
和 Powershell Core 7.2.2
有没有人破解这个案例并设法解决这个烦恼?
我们通过在创建后更改 Pester-Coverage.xml 文件设法解决了这个问题。直接在Invoke-Pester -Configuration $config
命令下添加这段代码。
[xml]$pesterCoverageOut = get-content -path ".\Pester-Coverage.xml"
foreach ($classNode in $pesterCoverageOut.SelectNodes("//class")) {
$classNode.sourcefilename = "Interfaces/$($classNode.sourcefilename)"
}
foreach ($sourceFileNode in $pesterCoverageOut.SelectNodes("//sourcefile")) {
$sourceFileNode.name = "Interfaces/$($sourceFileNode.name)"
}
$pesterCoverageOut.Save(".\Pester-Coverage.xml")
在 Pester github 上创建了关于此解决方案的错误报告。
https://github.com/pester/Pester/issues/2149
自从 Pester 5 以来,建议使用 Pester 配置来生成测试和代码覆盖率输出。老派的 Pester 4 方法仍然有效,但我们想摆脱遗留警告。 由于我们开始使用 Pester Configuration,Azure DevOps 不再显示突出显示的预览文件。
错误看起来像这样;
我的 PowerShell 代码:
$pesterConfiguration = @{
Run = @{
Path = '.\Interfaces'
}
Should = @{
ErrorAction = 'Continue'
}
CodeCoverage = @{
CodeCoveragePath = $codeCoveragePath
OutputFormat = 'JaCoCo'
OutputEncoding = 'UTF8'
OutputPath = ".\Pester-Coverage.xml"
Enabled = $true
}
TestResult = @{
OutputPath = ".\Pester-Test.xml"
OutputFormat = 'NUnitXml'
OutputEncoding = 'UTF8'
Enabled = $true
}
}
#Invoke pester with the configuration hashtable
$config = New-PesterConfiguration -Hashtable $pesterConfiguration
Invoke-Pester -Configuration $config
Azure DevOps yaml 上传代码覆盖率
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'JaCoCo'
summaryFileLocation: '**/Pester-Coverage.xml'
pathToSources: $(System.DefaultWorkingDirectory)
failIfCoverageEmpty: true
使用老派的 Pester 4 方法,代码覆盖效果很好。
Invoke-Pester -Script $TestFiles -CodeCoverage $NotTestFiles -OutputFile $OutFile -OutputFormat NUnitXml -CodeCoverageOutputFile $OutCoverageFile
我正在结合使用 Pester 5.3.1
和 Powershell Core 7.2.2
有没有人破解这个案例并设法解决这个烦恼?
我们通过在创建后更改 Pester-Coverage.xml 文件设法解决了这个问题。直接在Invoke-Pester -Configuration $config
命令下添加这段代码。
[xml]$pesterCoverageOut = get-content -path ".\Pester-Coverage.xml"
foreach ($classNode in $pesterCoverageOut.SelectNodes("//class")) {
$classNode.sourcefilename = "Interfaces/$($classNode.sourcefilename)"
}
foreach ($sourceFileNode in $pesterCoverageOut.SelectNodes("//sourcefile")) {
$sourceFileNode.name = "Interfaces/$($sourceFileNode.name)"
}
$pesterCoverageOut.Save(".\Pester-Coverage.xml")
在 Pester github 上创建了关于此解决方案的错误报告。 https://github.com/pester/Pester/issues/2149