【问题标题】:How to mock a job in Pester?如何模拟 Pester 的工作?
【发布时间】:2018-07-16 11:18:12
【问题描述】:

我们正在尝试评估 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-Job 将抛出一个错误,它没有收到作业对象。

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

【问题讨论】:

    标签: powershell mocking pester


    【解决方案1】:

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

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

    例如:

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

    【讨论】:

    • 这很好。整洁干净的方法。
    • 我不知道这是可能的。就像你说的,它一直调用自己的Mock。喜欢你的解决方案!大拇指马克:)
    • 优秀的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多