3

我有一个 Pester 测试,我在其中模拟了我的函数的 Read-Host 调用,它遵循此问题中的格式:

如何在 Pester 测试中模拟 Read-Host?

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 链接中找到的解决方案。

模块 Test-Foo 函数的源代码:

function Test-Foo
{
    return (Read-Host "Enter value->");
}
4

1 回答 1

3

给定您的用例:模块 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'
    }
}
于 2018-05-11T18:01:52.437 回答