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 开始,您可以在所有内容上使用 -TagDescribeContextIt

这使得 运行 特定的断言变得非常容易,而不是其他任何事情。 您甚至可以使用 -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
    }

}