gpt4 book ai didi

azure - Pester 测试不会因数组缺失值而失败

转载 作者:行者123 更新时间:2023-12-02 23:59:24 26 4
gpt4 key购买 nike

我们正在编写 Pester 测试来测试 Azure 资源组是否包含某些标签。以下是脚本,不幸的是,即使我们正在检查的特定资源组不包含某些标签(来自定义的数组),Pester 测试也没有报告任何失败。 Pester 测试刚刚通过,我不确定我们在这里做错了什么。

$resourceGroupName ='DemoRG03032021' 

$listOfTags = @('BUSINESS-OWNER','COST-CENTER','LIFECYCLE1', 'APPLICATION','PROJECT-CODE','TECHNICAL-OWNER','BUDGET-CODE')

$checkTags = $false

Describe "Resource Group" {
Context "$resourceGroupName" {
$resourceGroup = Get-AzResourceGroup -Name $resourceGroupName

foreach ($tagName in $listOfTags)
{
It "$($resourceGroup.ResourceGroupName) has a $tagName as tag" {

$resourceGroup.tags.keys -contains $tagName | Should -Be $true
}
}
}
}

最佳答案

在 v5 中,您现在也可以这样做,我认为这更具可读性:

BeforeDiscovery {
$listOfTags = @('BUSINESS-OWNER', 'COST-CENTER', 'LIFECYCLE1', 'APPLICATION', 'PROJECT-CODE', 'TECHNICAL-OWNER', 'BUDGET-CODE')
}

BeforeAll {
$resourceGroupName = 'DemoRG03032021'
$resourceGroup = Get-AzResourceGroup -Name $resourceGroupName
}

Describe "Resource Group" -ForEach $listOfTags {
It "$($resourceGroup.ResourceGroupName) has a $_ as tag" {
$resourceGroup.tags.keys -contains $_ | Should -Be $true
}
}

编辑:将后续问题的答案放在这里,因为它更具可读性。

这就是我个人组织您在评论中发布的代码的方式。我认为实际上添加另一个逻辑 block 是有意义的。如果您将其他 It 语句放在使用 -Foreach 运行的 block 内,那么您也会为 $listOfTags 中的每个标签运行每个新测试一次,这可能不是这样你想要的。

BeforeDiscovery {
$listOfTags = @('BUSINESS-OWNER', 'COST-CENTER', 'LIFECYCLE1', 'APPLICATION', 'PROJECT-CODE', 'TECHNICAL-OWNER', 'BUDGET-CODE')
}

Describe "Resource Group Tests" {

BeforeAll {
$resourceGroupName = 'TestResourceGroup203122021'
$resourceGroupLocation = 'eastus22222'
$resourceGroup = Get-AzResourceGroup -Name $resourceGroupName
}

Context "Resource Group Tags" -ForEach $listOfTags {
It "$($resourceGroup.ResourceGroupName) has a $_ as tag" {
$resourceGroup.tags.keys -contains $_ | Should -Be $true
}
}

Context "Resource Group Attributes" {
It "Resource Group $($resourceGroup.ResourceGroupName) Exists" {
$resourceGroup | Should -Not -BeNullOrEmpty
}

It "$($resourceGroup.ResourceGroupName) Location is $resourceGroupLocation" {
$($resourceGroup.Location) | Should -Be $resourceGroupLocation
}
}
}

这是另一种思考方式。如果您写了以下内容:

Foreach ($tag in $listOfTags){
Write-Host 'do this thing for each tag'
Write-Host 'do this thing once'
}

想象每个 Write-Host 都是您的 It 语句。您不希望第二个语句与另一个语句位于相同的上下文中,因为您不希望它为 $listOfTags 中的每个值运行一次。您可以使用新的“描述”或“上下文” block 在逻辑上将其分开。

关于azure - Pester 测试不会因数组缺失值而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66594050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com