Invoke-Pester 仅 运行 单个 Assert/It 块
Invoke-Pester to only run a single Assert/It block
我正在为我的 Powershell 模块编写单元测试,每个模块都有一个文件,每个函数都有 Describe
块。 Context
块根据我尝试使用一些安排代码测试的行为组织测试,我的 It
块包含最少的 arrange/act 代码和一个断言。
我可以使用 Invoke-Pester "Path/To/Module"
将我的测试限制为仅 运行 单个测试文件
我还可以使用 Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
基于 Describe
块进行限制
因为我正在向现有 file
/Describe
/Context
添加新断言(通过新的 It
块),我想 test/debug 单独我的新断言,没有给定 describe/context 运行ning 的其余断言(但我在 describe/context 范围内设置的任何 mocks/variables 仍然可用。
我在开发新断言时一直在注释掉我现有的断言,然后在完成新测试后删除块注释和 运行 它们。这有效,但很笨重。
有没有办法 运行 Invoke-Pester
只执行给定的 It
列表?
developing/debuging 新测试是否有更好的工作流程,而不是让所有测试 运行 或将它们注释掉?
看起来没有任何方法可以通过 It
块的名称指定对 运行 的测试。
您可以将新测试分成一个新的 Describe
块,然后按照您描述的那样通过 -TestName
参数 运行 它,或者给它一个 -Tag
然后通过 Invoke-Pester
指定该标记,但这似乎不适用于嵌套 Describe
,它必须位于顶层。
我认为这对您不起作用,因为您的模拟和变量将在另一个描述中。
安装了 PowerShell 扩展的 VSCode 允许您通过 Describe 顶部的 "Run Tests" link 运行 单独的 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
块上以过滤 in/out 某些测试集。那是requested as a feature 2 years ago,但实现起来似乎并不简单。
我知道,这个问题很老了,但值得更新:
从 Pester 版本 5 开始,您可以在所有内容上使用 -Tag
:Describe
、Context
、It
这使得 运行 特定的断言变得非常容易,而不是其他任何事情。
您甚至可以使用 -ExcludeTag
.
排除特定代码
详情请见https://github.com/pester/Pester#tags。
如果您打算从版本 4 迁移到版本 5,请同时检查制动变化!
要添加到 ,并且基于 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
}
}
我正在为我的 Powershell 模块编写单元测试,每个模块都有一个文件,每个函数都有 Describe
块。 Context
块根据我尝试使用一些安排代码测试的行为组织测试,我的 It
块包含最少的 arrange/act 代码和一个断言。
我可以使用 Invoke-Pester "Path/To/Module"
将我的测试限制为仅 运行 单个测试文件
我还可以使用 Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
Describe
块进行限制
因为我正在向现有 file
/Describe
/Context
添加新断言(通过新的 It
块),我想 test/debug 单独我的新断言,没有给定 describe/context 运行ning 的其余断言(但我在 describe/context 范围内设置的任何 mocks/variables 仍然可用。
我在开发新断言时一直在注释掉我现有的断言,然后在完成新测试后删除块注释和 运行 它们。这有效,但很笨重。
有没有办法 运行 Invoke-Pester
只执行给定的 It
列表?
developing/debuging 新测试是否有更好的工作流程,而不是让所有测试 运行 或将它们注释掉?
看起来没有任何方法可以通过 It
块的名称指定对 运行 的测试。
您可以将新测试分成一个新的 Describe
块,然后按照您描述的那样通过 -TestName
参数 运行 它,或者给它一个 -Tag
然后通过 Invoke-Pester
指定该标记,但这似乎不适用于嵌套 Describe
,它必须位于顶层。
我认为这对您不起作用,因为您的模拟和变量将在另一个描述中。
安装了 PowerShell 扩展的VSCode 允许您通过 Describe 顶部的 "Run Tests" link 运行 单独的 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
块上以过滤 in/out 某些测试集。那是requested as a feature 2 years ago,但实现起来似乎并不简单。
我知道,这个问题很老了,但值得更新:
从 Pester 版本 5 开始,您可以在所有内容上使用 -Tag
:Describe
、Context
、It
这使得 运行 特定的断言变得非常容易,而不是其他任何事情。
您甚至可以使用 -ExcludeTag
.
详情请见https://github.com/pester/Pester#tags。
如果您打算从版本 4 迁移到版本 5,请同时检查制动变化!
要添加到
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
}
}