繁体   English   中英

Invoke-Pester 只运行一个 Assert/It 块

[英]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 开始,您可以在所有内容上添加-TagDescribeContextIt

这使得运行特定断言变得非常容易,仅此而已。 您甚至可以使用-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM