![](/img/trans.png)
[英]How to mock a powershell function with mandatory parameters in pester
[英]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.