我有一个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值。
我的意图是测试将自动运行而无需输入Read-Host值。这既可以直接调用测试(当前有效),也可以使用CodeCoverage命令调用我的测试文件。
有谁知道实现这个目标的方法?
编辑:
对于我收到的第一条评论,我查看了Pester的文档,包括此链接https://github.com/pester/Pester/wiki/Unit-Testing-within-Modules。我还没有看到Pester关于使用Read-Host的任何官方文档,并且使用了我在问题顶部的StackOverflow链接中找到的解决方案。
Module Test-Foo函数的源代码:
function Test-Foo
{
return (Read-Host "Enter value->");
}
答案 0 :(得分:3)
鉴于您的用例:
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'
}
}