Я пишу тесты для довольно сложного сценария, и в сценарии есть одна особая функция, которая будет выводить пользователю различные серии сообщений журнала. Я хотел бы подтвердить, отображается ли конкретное сообщение журнала.
Основная проблема заключается в том, что я не знаю, какой параметр неявно обрабатывает текст, который я передаю командлету Write-Host
.
Вот некоторый код, который отражает предпосылку того, что я пытаюсь сделать ...
Функция для проверки
function TestFunction($TestInput) {
if ($TestInput -contains 1) {
Write-Host "TestInput contains a 1"
}
if ($TestInput -contains 3 ) {
Write-Host "TestInput contains a 3"
}
if ($TestInput -contains 4 ) {
Write-Host "TestInput contains a 4"
}
}
Тест Пестера
Describe "TestFunction" {
It "should call Write-Host with appropriate message if 1 or 3 is passed" {
Mock Write-Host {}
TestFunction -TestInput @(1, 2, 3)
Assert-MockCalled Write-Host -Exactly 2 -Scope It
Assert-MockCalled Write-Host -Exactly 1 -Scope It -ParameterFilter { "TestInput contains a 1" }
Assert-MockCalled Write-Host -Exactly 1 -Scope It -ParameterFilter { "TestInput contains a 3" }
}
}
Вывод
Describing TestFunction
[-] should call Write-Host with appropriate message if 1 or 3 is passed 19ms
at <ScriptBlock>, : line 235
235: Assert-MockCalled Write-Host -Exactly 1 -Scope It -ParameterFilter { "TestInput contains a 1" }
Expected Write-Host to be called 1 times exactly but was called 2 times
Tests completed in 106ms
Tests Passed: 0, Failed: 1, Skipped: 0, Pending: 0, Inconclusive: 0