从 pester test run start-job 返回测试结果

问题描述

我正在使用 pester 测试我的自定义 cmdlet。测试是启动环境的端到端测试;编译和加载程序集并对动态编译的代码执行测试。

我需要在新的 PowerShell 进程中进行实际测试(以便每次都可以编译和加载程序集),因此我使用 start-job 在后台使用 start-job 运行测试并等待receive-job -wait 的结果。像这样:

Describe 'Run' {
        It 'StartJobTest'  {
            start-job -script {invoke-pester .\MyTests.Tests.ps1} | receive-job -wait
        }
}

一切正常,除了我无法从作业返回任何测试成功或失败状态,以便可以将调用 pester 测试标记为成功或失败。

有谁知道如何实现这一目标。我尝试设置 $global:pesterPreference.Run.Exit = $true 但这没有任何区别。

感谢收到任何帮助或建议,

大卫

解决方法

我认为您需要使用 -PassThru 开关:

返回包含测试结果的自定义对象 (PSCustomObject)。默认情况下,Invoke-Pester 写入主机程序,而不是输出流 (stdout)。如果您尝试将结果保存在变量中,则该变量为空,除非您使用 PassThru 参数。

Describe 'Run' {
    It 'StartJobTest' {
        $Results = Start-Job -Name Invoke-Pester -ScriptBlock {
            Invoke-Pester -Path '.\MyTests.Tests.ps1' -PassThru
        } | Receive-Job -Wait -AutoRemoveJob
        
        $Results.FailedCount | Should -BeExactly 0
    }
}

附言在 Pester v5 中,此开关替换为 ConfigurationProperty Run.PassThruhttps://pester.dev/docs/migrations/v4-to-v5

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...