我正在为Powershell模块编写单元测试,每个模块都有一个文件,每个功能都有Describe块。 Context块按照我尝试使用某种排列代码进行测试的行为来组织测试,而It块包含最少的排列/操作代码和断言。

我可以使用Invoke-Pester "Path/To/Module"将测试限制为仅运行一个测试文件
我还可以通过使用Describe限制基于Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")

当我向现有的It / file / Describe添加新的断言(通过新的Context块)时,我想单独测试/调试我的新断言,而无需运行给定describe / context的其余断言(但是我在describe / context范围内设置的所有模拟/变量仍然可用。

在开发新的断言时,我一直在注释掉我现有的断言,然后在完成新测试后删除块注释并运行所有断言。这可行,但笨拙。

有没有一种方法可以运行Invoke-Pester只执行给定的It列表?
除了让所有测试都运行或将其注释掉之外,是否有更好的工作流程来开发/调试新测试?

最佳答案

看起来没有任何方法可以通过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,但似乎实现起来并不简单。

关于powershell - Invoke-Pester仅运行单个Assert/It块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56960448/

10-13 07:52