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
预计会调用模拟函数,下面会提供更多信息。
我正在尝试在嵌套模块中模拟一个函数。文件结构如下:
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'。
我试图查看有关模拟和模拟嵌套模块的其他一些未解决的问题,https://github.com/pester/Pester/issues/204。但是我无法获得任何可以使用它的代码。
我无法有效地使用Pester来测试我的PowerShell代码。
相关Github问题在此处打开:https://github.com/pester/Pester/issues/1017
答案 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文档中没有找到明确的解释,但是在我自己的故障排除中发现了它。