我正在为Powershell模块编写单元测试,并为每个模块编写一个文件,并为每个功能编写Describe
块。 Context
块按照我尝试使用某种排列代码进行测试的行为来组织测试,而我的It
块包含最少的排列/操作代码和断言。
我可以使用Invoke-Pester "Path/To/Module"
将测试限制为仅运行单个测试文件
我也可以通过使用Describe
Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
块进行限制
当我将新的断言(通过新的It
块添加到现有的file
/ Describe
/ Context
时,我想测试/调试新的断言单独使用断言,而不会运行给定描述/上下文的其余断言(但我在describe / context范围设置的任何模拟/变量仍然可用。
在开发新的断言时,我一直在注释掉我现有的断言,然后在完成新测试后删除块注释并运行所有断言。这行得通,但是笨拙。
是否有一种方法可以运行Invoke-Pester
只执行给定的It
列表?
除了让所有测试都运行或将其注释掉以外,是否有更好的工作流程来开发/调试新测试?
答案 0 :(得分:2)
似乎没有任何方法可以指定要通过It
块的名称运行的测试。
您可以将新测试拆分为一个新的Describe
块,然后通过您描述的-TestName
参数运行它,或者给它一个-Tag
然后通过指定该标记Invoke-Pester
,但是似乎不适用于嵌套的Describe
,它必须在顶层。
我认为这对您不起作用,因为您的Mocks and Variables将在另一个描述中。
安装了PowerShell扩展的VSCode允许您通过Describe顶部的“运行测试”链接运行单个Describe块,这对于嵌套块确实适用。但是我不确定这是否会导致来自父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
块上以过滤某些测试集。那是requested as a feature 2 years ago,但实现起来似乎并不简单。
答案 1 :(得分:0)
从Pester版本5开始,您可以在所有内容上使用-Tag
:Describe
,Context
,It
这使得运行特定的断言非常容易,而没有其他任何事情。
您甚至可以使用-ExcludeTag
排除特定代码。
有关详细信息,请参见https://github.com/pester/Pester#tags。
如果您打算从版本4迁移到版本5,还请检查制动更改!