如何在Pester模拟工作?

时间:2018-07-16 11:18:12

标签: powershell mocking pester

我们正尝试评估<tr><td( [^>]*)?>(.(?!</td>)){89,}.</td></tr> 是否已经被正确调用过一次。

Script.ps1

Invoke-Command

Script.Tests.ps1

Get-Job | Remove-Job

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

Wait-Job
Get-Job | Reveive-Job

问题是在Pester中模拟了作业对象。当不模拟作业时,Describe 'Test' { Mock Invoke-Command { # Mock here } It 'should be green' { ."$here\$sut" @Params Assert-MockCalled -CommandName Invoke-Command -Times 1 -Exactly -Scope It } } 将引发一个错误,即它没有收到作业对象。

如何在Wait-Job中模拟PowerShell作业对象?

1 个答案:

答案 0 :(得分:6)

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

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

例如:

$InvokeCommand = Get-Command Invoke-Command

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