繁体   English   中英

如何在Pester中模拟一份工作?

[英]How to mock a job in Pester?

我们正在尝试评估Invoke-Command是否已被调用一次。

Script.ps1

Get-Job | Remove-Job

Invoke-Command -ScriptBlock {'test'} -ComputerName localhost -AsJob

Wait-Job
Get-Job | Reveive-Job

Script.Tests.ps1

Describe 'Test' {
    Mock Invoke-Command {
         # Mock here
    }
    It 'should be green' {
        ."$here\$sut" @Params
        Assert-MockCalled -CommandName Invoke-Command -Times 1 -Exactly -Scope It
    }
}

问题是在Pester中模拟工作对象。 当作业未被Wait-JobWait-Job将抛出一个错误,表明它没有收到作业对象。

如何在Pester模拟PowerShell作业对象?

一个解决方案可能是让Mock of Invoke-Command仍然创建一个合法的作业,但执行一些您认为安全的脚本/代码以进行测试。

为此,您需要首先将Invoke-Command cmdlet放在变量中,以便可以通过该变量使用它(因为Mock不能直接调用它自己的命令)。

例如:

$InvokeCommand = Get-Command Invoke-Command

Mock Invoke-Command {
     & $InvokeCommand -ScriptBlock {'some safe alternative code'} -ComputerName localhost -AsJob
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM