- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有任何简单的方法来模拟 Pester 中的 Rest API 调用。
这是我的代码,我只需要模拟那些 Pester 中的 Rest API 调用 并测试它们,有人可以帮我吗。
Describe 'Test worldclockapi.com' {
BeforeAll {
$response = Invoke-WebRequest -Method 'GET' -Uri 'http://worldclockapi.com/api/json/utc/now'
$responseContent = $response.Content | ConvertFrom-Json
Write-Output $responseContent
}
It 'It should respond with 200' {
$response.StatusCode | Should -Be 200
}
It 'It should have a null service response' {
$responseContent.serviceResponse | Should -BeNullOrEmpty
}
It 'It should be the right day of the week' {
$dayOfWeek = (Get-Date).DayOfWeek
$responseContent.dayOfTheWeek | Should -Be $dayOfWeek
}
It 'It should be the right year' {
$year = Get-Date -Format 'yyyy'
$responseContent.currentDateTime | Should -BeLike "*$year*"
}
It 'It should be the right month' {
$month = Get-Date -Format 'MM'
$responseContent.currentDateTime | Should -BeLike "*$month*"
}
# These two tests assume you are running this outside daylight savings (during the winter) .. hacky but good way to showcase the syntax ;)
It 'It should not be daylight savings time' {
$responseContent.isDayLightSavingsTime | Should -Not -Be $true
}
It 'It should not be daylight savings time another way' {
$responseContent.isDayLightSavingsTime | Should -BeFalse
}
}
最佳答案
使用真实响应作为模拟输出的模板可能是最简单的。
Invoke-WebRequest -Method 'GET' -Uri 'http://worldclockapi.com/api/json/utc/now' |
Export-Clixml .\response.xml
上述命令会将来自 API 的真实响应序列化到文件。
现在我们可以导入文件以与我们的模拟一起使用。只需使用 Mock
命令来定义我们的 mock。
模拟
-CommandName
: 我们模拟的命令-ParameterFilter
:一个可选的过滤器,用于将模拟行为限制为仅使用 CommandName,其中传递给命令的参数值通过过滤器。此 ScriptBlock 必须返回一个 bool 值。-MockWith
:一个 ScriptBlock,指定将用于模拟 CommandName 的行为。默认是一个空的 ScriptBlock。我们在这里导入文件作为我们的输出。Mock -CommandName Invoke-WebRequest -ParameterFilter { $Method -eq 'GET' } -MockWith { Import-Clixml .\response.xml }
现在,当使用 -Method 'Get'
调用 Invoke-WebRequest
时,我们的 mock 将被调用,并将返回我们使用 Import- 导入的对象CliXml
(或其他方法 - json、xml 等。
注意:模拟命令必须在对我们正在模拟的命令的任何调用之前出现。另请注意,即使在内部也会调用模拟使用该命令的其他函数。
BeforeAll {
Mock -CommandName Invoke-WebRequest -ParameterFilter { $Method -eq 'GET' } -MockWith { Import-Clixml .\response.xml }
# on this next line our mock will be called instead and will return our prepared object
$response = Invoke-WebRequest -Method 'GET' -Uri 'http://worldclockapi.com/api/json/utc/now'
$responseContent = $response.Content | ConvertFrom-Json
Write-Output $responseContent
}
关于PowerShell 纠缠模拟 Rest API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68523189/
我在 Pester 中有以下简单的测试: # Name.Tests.ps1 $name = "foo" Describe "Check name" { It "should have the co
我们正在尝试检查 CmdLet Start-ScheduledTask 是否已为特定计划任务准确调用一次。但由于某种原因,ParameterFilter 不匹配。 代码 $here = Split-P
我正在使用 pester 来测试我抛出的异常(负面测试)。 尽管看起来抛出的异常消息与我的Should -Throw 完全匹配,但当异常消息中有方括号时,Pester 会声明测试失败。通过从抛出的异常
我是一名优秀的程序员,十分优秀!