1

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 并查看它是否运行,并且它使用非模拟函数。

我们之前已经让模拟函数与非嵌套函数一起工作,但运气不佳。根据 Pester 的 README,我确实尝试确保根模块至少为“*.psm1”。

5. 可能的解决方案

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

6. 背景

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

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

4

1 回答 1

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 文档中没有找到对此的明确解释,但在我自己的故障排除中发现了它。

于 2018-09-24T19:02:06.053 回答