繁体   English   中英

您如何在 Powershell 中使用 Pester 模拟 ErrorRecord?

[英]How can you mock an ErrorRecord with Pester in Powershell?

我有一个 function,我想将其包含在我的单元测试中,但我无法弄清楚如何。 该方法接收 ErrorRecord object(来自 Invoke-RestMethod 调用),获取状态代码并生成自定义错误消息。 这是调用的第一部分的样子:

function Resolve-RestError {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $RequestError
    )
    $statusCode = $requestError.Exception.Response.StatusCode.value__
    switch ($statusCode) {

我遇到的问题是重新创建 ErrorRecord object。 我花了很多时间寻找一种方法来重新创建错误 object,但我无法准确地重新创建它。

在实际执行期间的ErrorRecord object中,访问Response.StatusCode字段会返回一个带有代码描述的字符串。 要访问实际值,您需要调用 Response.StatusCode.value__。 似乎不可能重建 internal.value__ 变量,因为这是由 JIT 编译器完成的(据我了解)。 有没有办法将 a.value__ 属性添加到自定义 object,或者在我的测试期间简单地模拟该变量?

没错,重新创建 ErrorRecord object 似乎并不太简单。 我对这类事情的转到是模拟 output 我想在我的测试中模拟,然后通过Export-CliXml存储该结果,但是当使用 ErrorRecord 尝试这个时,你只能得到 Exception.Response 并且 rest 丢失了转换(即使设置-Depth值)。

可能有更聪明的方法,但一种解决方法是按如下方式伪造 object(请注意,您没有提供完整的 Function,所以我只是创建了一个简化版本来证明它适用于这种特定情况):

function Resolve-RestError {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $RequestError
    )
    $statusCode = $RequestError.Exception.Response.StatusCode.value__

    Return $statusCode
}

Describe 'Resolve-RestError' {

    It 'Should handle a 404' {

        $ErrorRecord = [pscustomobject]@{ 
            Exception = @{
                Response = @{
                    StatusCode = @{
                        value__ = 404
                    }
                }
            }
        }
        
        Resolve-RestError -RequestError $ErrorRecord | Should -Be 404
    }
}

暂无
暂无

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

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