我有一个Pester测试,其中模拟了我的函数的Read-Host调用,该调用遵循此问题的格式:
How do I mock Read-Host in a Pester test?
Describe "Test-Foo" {
Context "When something" {
Mock Read-Host {return "c:\example"}
$result = Test-Foo
It "Returns correct result" { # should work
$result | Should Be "c:\example"
}
It "Returns correct result" { # should not work
$result | Should Be "SomeThingWrong"
}
}
}
使用这种格式并直接调用测试时,我的测试可以完美运行。但是,当我使用Invoke-Pester“MyTestFile” -CodeCoverage“MyFileUnderTest”运行包含测试的文件时,系统会提示我输入测试的读取主机值。
我的意图是测试将自动运行,而无需输入Read-Host值。直接调用测试(当前有效)时,以及使用CodeCoverage命令调用测试文件时,都是这样。
有人知道实现此目标的方法吗?
编辑:
对于收到的第一条评论,我已经审阅了Pester的文档,包括此链接https://github.com/pester/Pester/wiki/Unit-Testing-within-Modules。我还没有看到Pester提供的有关使用Read-Host的任何官方文档,并且使用了我在问题顶部的StackOverflow链接中找到的解决方案。
模块Test-Foo功能的源代码:
function Test-Foo
{
return (Read-Host "Enter value->");
}
最佳答案
给定您的用例:Module Test-Foo函数
function Test-Foo {
return (Read-Host -Prompt 'Enter value->')
}
我建议您改为模拟
Test-Foo
函数:Context 'MyModule' {
Mock -ModuleName MyModule Test-Foo { return 'C:\example' }
It 'gets user input' {
Test-Foo | Should -Be 'C:\example'
}
}