[英]Invoke-Pester to only run a single Assert/It block
我正在为我的 Powershell 模块编写单元测试,每个模块都有一个文件,每个函数都有Describe
块。 Context
块沿着我尝试使用一些排列代码测试的行为组织测试,我的It
块包含最少的排列/动作代码和断言。
我可以使用Invoke-Pester "Path/To/Module"
将我的测试限制为仅运行单个测试文件 我还可以使用Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
根据Describe
块进行限制Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
当我向现有file
/ Describe
/ Context
添加新断言(通过新的It
块)时,我想单独测试/调试我的新断言,而不运行给定 describe/context 的其余断言(但使用我在描述/上下文范围内设置的任何模拟/变量仍然可用。
在开发新断言时,我一直在注释掉我现有的断言,然后在完成新测试后删除块注释并运行它们。 这有效,但很笨重。
有没有办法运行Invoke-Pester
只执行给定的It
列表? 除了让所有测试都运行或将它们注释掉之外,是否有更好的工作流程来开发/调试新测试?
看起来没有任何方法可以通过It
块的名称指定要运行的测试。
您可以将新测试拆分为新的Describe
块,然后按照您的描述通过-TestName
参数运行它,或者给它一个-Tag
然后通过Invoke-Pester
指定该标签,但这似乎不适用于一个嵌套的Describe
,它必须在顶层。
我认为这对您不起作用,因为您的模拟和变量将在另一个描述中。
安装了 PowerShell 扩展的 VSCode 允许您通过描述顶部的“运行测试”链接运行单个描述块,这对嵌套块有效。 但是我不确定这是否会导致调用父 Describe 块中的 Mocks/Variables(我的猜测不会)。
嵌套的Describe
示例,可以在 VSCode 中单独运行:
Describe 'My-Tests' {
It 'Does something' {
$true | Should -Be $true
}
Describe 'NewTest' {
It 'Does something new' {
$true | Should -Be $true
}
}
}
很遗憾,您目前不能将标签放在Context
块上以过滤/过滤某些测试集。 这是2 年前要求的功能,但实现起来似乎并不简单。
从 Pester 版本 5 开始,您可以在所有内容上添加-Tag
: Describe
、 Context
、 It
这使得运行特定断言变得非常容易,仅此而已。 您甚至可以使用-ExcludeTag
排除特定代码。
有关详细信息,请参阅https://github.com/pester/Pester#tags 。
如果您打算从版本 4 迁移到 5,还请查看制动更改!
要添加到Tofuburger 的答案,并且基于 Pester 5.3.1,您还可以在测试脚本中基于标签以编程方式操作测试。
Describe 'Colour' -Tag 'Epistemology' {
BeforeAll {
$ParentBlockTags = $____Pester.CurrentBlock.Tag
if ($ParentBlockTags -eq 'Epistemology')
{
Set-ItResult -Inconclusive
}
}
BeforeEach {
$ItTags = $____Pester.CurrentTest.Tag
if ($ItTags -eq 'HSL')
{
Set-ItResult -Skipped -Because 'Not implemented'
}
}
It 'Saturates' -Tag 'HSL' {
1 | Should -Be 2
}
It 'Greens' -Tag 'RGB' {
1 | Should -Be 3
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.