在嵌套模块中发出模拟

时间:2018-04-06 16:16:39

标签: powershell pester

1。在上面的标题

中提供问题的一般摘要

2。描述您的环境

Pester version     : 4.3.1 /usr/local/share/powershell/Modules/Pester/4.3.1/Pester.psm1
PowerShell version : 6.0.1
OS version         : Unix 16.7.0.0

3。预期行为

预计会调用模拟函数,下面会提供更多信息。

4.当前行为

我正在尝试在嵌套模块中模拟一个函数。文件结构如下:

Module
│   Module.psd1
│ 
└───NestedModule1
│   │   NestedModule1.psm1
│ 
└───NestedModule2
│   │   NestedModule2.psm1
│ 
└───NestedModule3
│   │   NestedModule3_1.psm1
│   │   NestedModule3_2.psm1
│   │   NestedModule3_3.psm1

我在NestedModule1.psm1中运行一个函数,该函数调用NestedModule2.psm1中的函数。我希望NestedModule2.psm1中的函数返回一个错误代码(在我们的末尾定义为'99')所以我尝试使用

模拟它
Mock NestedModule2_function {return "99"} -ModuleName NestedModule1

我希望能够调用这个模拟函数,所以我使用下面的函数来检查:

Assert-MockCalled NestedModule2_function

从这个功能我收到RuntimeException: You did not declare a mock of the NestedModule2_function Command.

我希望这个被调用一次,但似乎错误就是说我根本没有嘲笑这个函数,或者至少没有正确地模拟它。我还尝试删除Assert-MockCalled并查看它是否运行,并使用非模拟函数。

我们已经让mock函数在使用非嵌套函数之前工作但是运气不好。我确实尝试确保根据PME自述文件的根模块至少是'* .psm1'。

5。可能的解决方案

我试图查看有关模拟和模拟嵌套模块的其他一些未解决的问题,https://github.com/pester/Pester/issues/204。但是我无法获得任何可以使用它的代码。

6。上下文

我无法有效地使用Pester来测试我的PowerShell代码。

相关Github问题在此处打开:https://github.com/pester/Pester/issues/1017

1 个答案:

答案 0 :(得分:0)

请确保您在杵测试文件中使用Import-Module明确导入了嵌套模块。

Import-Module NestedModule1 #necessary for mocks to work, even though this may already be implicitly imported by Module.
Import-Module NestedModule2
Import-Module NestedModule3
Import-Module Module

Mock NestedModule2_function {return "99"} -ModuleName NestedModule1

Describe <test name> {
    <my test block>
}

我在Pester文档中没有找到明确的解释,但是在我自己的故障排除中发现了它。