首页 > 解决方案 > 从纠缠测试运行开始作业返回测试结果

问题描述

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

我需要在一个新的 PowerShell 进程中进行实际测试(这样每次都可以编译和加载程序集),所以我使用 start-job 在后台运行测试start-job并使用receive-job -wait. 像这样的东西:

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

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

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

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

大卫

标签: powershelljobscmdletpester

解决方案


我认为您需要使用-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
    }
}

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


推荐阅读