簡體   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