如果列表为空,我希望能够跳过测试。
一个非常简单的例子:
没有名字是-eq到"jens",因此$newlist将是空的,当然测试将失败,但是如果列表是空的,我如何防止它通过这个测试?
context {
BeforeAll{
$List = @(Harry, Hanne, Hans)
$newlist = @()
foreach ($name in $List) {
if (($name -eq "Jens")) {
$name += $newlist
}
}
}
It "The maximum name length is 10 characters" {
$newlist |ForEach-Object {$_.length | Should -BeIn (1..10) -Because "The maximum name length is 10 characters"}
}
}
失败信息:
Expected collection @(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) to contain 0, because The maximum name length is 10 characters, but it was not found.
您可以通过使用Set-ItResult
来实现这一点,这是一个允许您强制执行特定结果的Pester cmdlet。例如:
Describe 'tests' {
context 'list with content' {
BeforeAll {
$List = @('Harry', 'Hanne', 'Hans')
$newlist = @()
foreach ($name in $List) {
if (($name -eq "Jens")) {
$newlist += $name
}
}
}
It "The maximum name length is 10 characters" {
if (-not $newlist) {
Set-ItResult -Skipped
}
else {
$newlist | ForEach-Object { $_.length | Should -BeIn (1..10) -Because "The maximum name length is 10 characters" }
}
}
}
}
请注意,在你的例子中有一个错误($newlist
没有更新名称,你正在做相反的事情),我在上面纠正了,但是你的测试实际上并没有在这个例子中失败(在添加Set-ItResult
逻辑之前)。我认为这是因为通过使用ForEach-Object
与空数组作为输入,Should
在其为空时永远不会执行,所以使用这种方法,您的测试将通过,因为它从不评估任何东西。