- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑
问题的症结在于:如何访问在我的 It
block 中的 BeforeDiscovery
block 中声明的变量,这些变量没有被it -foreach $var
构造?
我很难适应 Pester 5 中的发现/运行阶段和变量范围
背景
我们正在移动服务器,我要测试的是
serverA
上的每个共享也在 serverB
上存在。serverA
上的每个可读 共享在serverB
上也是可读。使用 Pester 5,下面的代码按预期运行,但要使其正常工作,我必须检索 $toShares
两次。在我的实际测试中检索共享是使用 net view
并且是一个运行时间相当长的操作。
$toShares
以构建 $readableFromShares
列表$toShares
才能在 should exists
测试中使用它们问题
我怎样才能最好地重组我的测试,以便我只需要检索一次 $toShares
?
测试代码
$PesterPreference = [PesterConfiguration]::Default
$PesterPreference.Output.Verbosity = 'Detailed'
function Test-Path {$True} # hide the real Test-Path function
Describe "Describe" -ForEach @(
@{fromServer ='serverA'; toServer = 'serverB'}
@{fromServer ='serverC'; toServer = 'serverD'}
){
BeforeDiscovery {
$fromShares = 'share1', 'share2', 'share3'
# $toShares is needed here to construct the readableFromShares array
$toShares = 'share1', 'share2'
$readableFromShares = $fromShares |
Where-Object {$toShares -contains $_} |
Where-Object {Test-Path "\\$($fromServer)\$($_)"}
}
Context "<fromServer> samba shares should exist on <toServer>" {
BeforeAll {
# the "same" $toShares is needed here to be available in the exist tests
$toShares = 'share1', 'share2'
}
It "Does \\<toServer>\<_> exist" -ForEach $fromShares {
$toShares -contains $_ | Should -Be $true
}
}
Context "Readable <fromServer> samba shares should als be readable on <toServer>" {
It "<_> is readable on <fromServer>. \\<toServer>\<_> should also be readable." -ForEach $readableFromShares {
Test-Path "\\$($toServer)\$($_)"| Should -Be $True
}
}
}
输出 包括两次故意失败的测试
编辑
测试用例包括
测试
$PesterPreference = [PesterConfiguration]::Default
$PesterPreference.Output.Verbosity = 'Detailed'
function Test-Path {$True} # hides the real Test-Path
function Get-FromShares($fromServer) {if ($fromServer -eq 'serverA') { @('ABshare1', 'ABshare2', 'ABshare3') } else {@('XYshare1', 'XYshare2', 'XYshare3')}}
function Get-ToShares($toServer) {if ($toServer -eq 'serverB') { @('ABshare1', 'ABshare2') } else {@('XYshare1', 'XYshare2')}}
class Shares { static $toShares = @{} }
function Test-Path {$True} # hides the real Test-Path
Describe "Describe" -ForEach @(
@{fromServer ='serverA'; toServer = 'serverB'}
@{fromServer ='serverX'; toServer = 'serverY'}
){
#It "Define shares" -TestCases @( 1 ) { class Shares { static [string[]]$toShares = @('share1', 'share2') } }
BeforeDiscovery {
$fromShares = Get-FromShares($fromServer)
[Shares]::toShares =@{ $fromServer = Get-ToShares($toServer)}
$toShares = [Shares]::toShares[$fromServer]
$readableFromShares = $fromShares |
Where-Object {$toShares -contains $_} |
Where-Object {Test-Path "\\$($fromServer)\$($_)"}
}
Context "<fromServer> samba shares should exist on <toServer>" {
BeforeAll {
$toShares = [Shares]::toShares[$fromServer]
}
It "Does \\<toServer>\<_> exist" -ForEach $fromShares {
$toShares -contains $_ | Should -Be $true
}
}
Context "Readable <fromServer> samba shares should als be readable on <toServer>" {
It "<_> is readable on <fromServer>. \\<toServer>\<_> should also be readable." -ForEach $readableFromShares {
Test-Path "\\$($toServer)\$($_)"| Should -Be $True
}
}
}
最佳答案
解决方案是使用您希望在 It
block 中可用的任何数据来丰富传递给 -foreach
子句的变量。
在下面的示例中,$fromShares
数组现在包含一个对象数组,而不是一个普通的字符串数组。每个对象仍包含共享名称,还包含您在测试中需要的 $toShares
数组。
Describe "Describe" -ForEach @(
@{fromServer ='serverA'; toServer = 'serverB'}
@{fromServer ='serverX'; toServer = 'serverY'}
){
BeforeDiscovery {
$toShares = Get-ToShares($toServer)
$fromShares = Get-FromShares($fromServer) | % {
[PSCustomObject]@{
fromShare = $_
toShares = $toShares
}
}
$readableFromShares = $fromShares |
Where-Object {$toShares -contains $_} |
Where-Object {Test-Path "\\$($fromServer)\$($_)"}
}
Context "<fromServer> samba shares should exist on <toServer>" {
BeforeAll {
$toShares = [Shares]::toShares[$fromServer]
}
It "Does \\<toServer>\<_.fromShare> exist" -ForEach $fromShares {
$_.toShares -contains $_.fromShare | Should -Be $true
}
}
Context "Readable <fromServer> samba shares should als be readable on <toServer>" {
It "<_> is readable on <fromServer>. \\<toServer>\<_> should also be readable." -ForEach $readableFromShares {
Test-Path "\\$($toServer)\$($_)"| Should -Be $True
}
}
}
关于windows - Pester 5 变量作用域问题 - BeforeDiscovery/It,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66806373/
我正在尝试为我的 Azure 自动化 Runbook 编写 Pester 测试。 Runbook 脚本使用 Get-AutomationVariable cmdlet,我尝试通过以下方式模拟它: mo
我正在尝试为我的 Azure 自动化 Runbook 编写 Pester 测试。 Runbook 脚本使用 Get-AutomationVariable cmdlet,我尝试通过以下方式模拟它: mo
我有一套 pester测试使用 v4.0+ should 运算符 -FileContentMatch 的 PowerShell 模块。当这些测试在装有较早 v3.x 版本 pester 的机器上运行时
function Palindrome1 { [CmdletBinding()] param ( [Parameter(Mandatory)] [str
我们正在编写 Pester 测试来测试 Azure 资源组是否包含某些标签。以下是脚本,不幸的是,即使我们正在检查的特定资源组不包含某些标签(来自定义的数组),Pester 测试也没有报告任何失败。
我正在尝试使用Pesters TestDrive为自定义文件管理Powershell函数创建测试。 但是,我没有让它以任何方式运行,总是会收到TestDrive不存在的错误。 即使使用文档中的示例:h
我正在测试 PowerShell 脚本。我想在不执行整个脚本的情况下测试单个函数。我不确定这是预期的用例还是受支持的,并且我在网上搜索时找不到好的答案 sut.ps1: Param( [Par
我们正在编写 Pester 测试来测试 Azure 资源组是否包含某些标签。以下是脚本,不幸的是,即使我们正在检查的特定资源组不包含某些标签(来自定义的数组),Pester 测试也没有报告任何失败。
当我运行以下纠缠测试时,我希望它能够捕获预期的错误,但它没有。但是,当我使用不同的 throw 语句使用不同的函数运行测试时,它会起作用。 纠缠测试: Describe "Remove-Generic
如何unmock 以前模拟的函数?有时我发现自己处于一种情况,我想测试我之前mocked 的函数。 一个简化的例子: Describe 'Pester mocking' { $testFile
我们正在尝试评估 Invoke-Command被调用了一次。 脚本.ps1 Get-Job | Remove-Job Invoke-Command -ScriptBlock {'test'} -Com
Invoke-Pester命令可以使用 -Script 调用带有显式参数的单个测试脚本。范围。但是如果我想将相同的参数传递给所有的测试脚本呢? 我不想在循环中调用 peter,因为我希望它生成单个测试
我有一个 Pester 脚本,正在为我的 API 运行一些冒烟测试。当我运行 Invoke-Pester 时,我得到了 Logo 并且测试运行良好。但是在日志的末尾我得到 Tests Passed:
我们正在努力让 Pester 测试失败或通过,这取决于 array 中的 objects 是否相等。 测试.ps1 #require Assert #require Pester $Expected
我想知道为什么在运行此脚本时会出现以下行为。我在 PowerShell ISE(v4 主机)中加载了脚本并加载了 Pester 模块。我按 F5 运行脚本。 function Test-Pester
我正在尝试找出如何对缺少的参数进行 Pester 测试: Find-Waldo.Tests.ps1 $here = Split-Path -Parent $MyInvocation.MyCommand
在 nUnit 中,我们可以这样做: Expect(actualColleciton, EquivalentTo(expectedCollection)); 和 Expect(actualCollec
我有很多模块,包括 ModuleMain 和 ModuleSql。模块之间存在相互依赖性,因此 ModuleMain 中的 Main-Function 使用了 ModuleSql 中的 4 个函数:
我正在使用 Pester 测试一个 PowerShell 脚本,该脚本点源另一个脚本。当我尝试模拟点源函数时,Pester 拒绝使用模拟版本。当我尝试通过将函数添加到 .psm1 文件并使用 Impo
编辑 问题的症结在于:如何访问在我的 It block 中的 BeforeDiscovery block 中声明的变量,这些变量没有被it -foreach $var 构造? 我很难适应 Pester
我是一名优秀的程序员,十分优秀!