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

时间:2019-07-09 20:59:42

标签: powershell testing pester

我正在为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列表? 除了让所有测试都运行或将其注释掉以外,是否有更好的工作流程来开发/调试新测试?

2 个答案:

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

这使得运行特定的断言非常容易,而没有其他任何事情。 您甚至可以使用-ExcludeTag排除特定代码。

有关详细信息,请参见https://github.com/pester/Pester#tags

如果您打算从版本4迁移到版本5,还请检查制动更改!