对 Pester 中集合中的每个项目进行断言
Assertion over each item in collection in Pester
我正在 Pester 中进行一些基础设施测试,但有重复的场景,我不知道如何处理。
比方说,我想检查 IIS 上是否启用了所有必需的 Web 角色。我有一组必需的 Web 角色,我想为每个角色声明它已启用。
我当前的代码如下所示:
$requiredRoles = @(
"Web-Default-Doc",
"Web-Dir-Browsing",
"Web-Http-Errors",
"Web-Static-Content",
"Web-Http-Redirect"
)
Context "WebRoles" {
It "Has installed proper web roles" {
$requiredRoles | % {
$feature = Get-WindowsOptionalFeature -FeatureName $_ -online
$feature.State | Should Be "Enabled"
}
}
}
从某种意义上说,如果任何角色不是 enabled/installed,测试就会失败。但如果这种 Pester 测试的输出如下所示,那几乎没有用:
Context WebRoles
[-] Has installed proper web roles 2.69s
Expected: {Enabled}
But was: {Disabled}
283: $feature.State | Should Be "Enabled"
这个结果没有给出任何关于哪个功能被禁用的线索。
在这些场景中有什么推荐的做法吗?我在考虑一些字符串操作......
Context "WebRoles" {
It "Has installed proper web roles" {
$requiredRoles | % {
$feature = Get-WindowsOptionalFeature -FeatureName $_ -online
$toCompare = "{0}_{1}" -f $feature.FeatureName,$feature.State
$toCompare | Should Be ("{0}_{1}" -f $_,"Enabled")
}
}
}
这将输出:
Context WebRoles
[-] Has installed proper web roles 2.39s
Expected string length 27 but was 28. Strings differ at index 20.
Expected: {IIS-DefaultDocument_Enabled}
But was: {IIS-DefaultDocument_Disabled}
-------------------------------^
284: $toCompare | Should Be ("{0}_{1}" -f $_,"Enabled")
...哪个比较好,但是感觉不是很好...
此外,还有第二个问题,即测试将在第一次失败时停止,我需要在修复每个功能后重新运行测试...
有什么想法吗?
将你的 It
放入循环中,如下所示:
Context "WebRoles" {
$requiredRole | ForEach-Object {
It "Has installed web role $_" {
(Get-WindowsOptionalFeature -FeatureName $_ -online).State | Should Be "Enabled"
}
}
}
我正在 Pester 中进行一些基础设施测试,但有重复的场景,我不知道如何处理。
比方说,我想检查 IIS 上是否启用了所有必需的 Web 角色。我有一组必需的 Web 角色,我想为每个角色声明它已启用。
我当前的代码如下所示:
$requiredRoles = @(
"Web-Default-Doc",
"Web-Dir-Browsing",
"Web-Http-Errors",
"Web-Static-Content",
"Web-Http-Redirect"
)
Context "WebRoles" {
It "Has installed proper web roles" {
$requiredRoles | % {
$feature = Get-WindowsOptionalFeature -FeatureName $_ -online
$feature.State | Should Be "Enabled"
}
}
}
从某种意义上说,如果任何角色不是 enabled/installed,测试就会失败。但如果这种 Pester 测试的输出如下所示,那几乎没有用:
Context WebRoles
[-] Has installed proper web roles 2.69s
Expected: {Enabled}
But was: {Disabled}
283: $feature.State | Should Be "Enabled"
这个结果没有给出任何关于哪个功能被禁用的线索。
在这些场景中有什么推荐的做法吗?我在考虑一些字符串操作......
Context "WebRoles" {
It "Has installed proper web roles" {
$requiredRoles | % {
$feature = Get-WindowsOptionalFeature -FeatureName $_ -online
$toCompare = "{0}_{1}" -f $feature.FeatureName,$feature.State
$toCompare | Should Be ("{0}_{1}" -f $_,"Enabled")
}
}
}
这将输出:
Context WebRoles
[-] Has installed proper web roles 2.39s
Expected string length 27 but was 28. Strings differ at index 20.
Expected: {IIS-DefaultDocument_Enabled}
But was: {IIS-DefaultDocument_Disabled}
-------------------------------^
284: $toCompare | Should Be ("{0}_{1}" -f $_,"Enabled")
...哪个比较好,但是感觉不是很好...
此外,还有第二个问题,即测试将在第一次失败时停止,我需要在修复每个功能后重新运行测试...
有什么想法吗?
将你的 It
放入循环中,如下所示:
Context "WebRoles" {
$requiredRole | ForEach-Object {
It "Has installed web role $_" {
(Get-WindowsOptionalFeature -FeatureName $_ -online).State | Should Be "Enabled"
}
}
}