Как я могу запретить Pester Mocked Read-Host запрашивать ввод во время выполнения кода - PullRequest
0 голосов
/ 11 мая 2018

У меня есть тест Пестера, где я макетирую вызов Read-Host для своей функции, который соответствует формату в этом вопросе здесь:

Как смоделировать Read-Host в тесте Pester?

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.

Кто-нибудь знает способ достижения этого?

Edit:

К первому полученному мной комментарию я просмотрел документацию Пестера, включая эту ссылку https://github.com/pester/Pester/wiki/Unit-Testing-within-Modules. Однако я не видел никакой официальной документации Пестера относительно использования Read-Host и использовал решение, которое я нашел в Ссылка StackOverflow вверху моего вопроса.

Исходный код для функции Test-Foo модуля:

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

1 Ответ

0 голосов
/ 11 мая 2018

С учетом вашего варианта использования: Функция 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'
    }
}
...