Возвращаемый результат теста при запуске тестового запуска pester-задание

#powershell #jobs #cmdlet #pester

Вопрос:

Я использую pester для тестирования своих пользовательских командлетов. Тесты представляют собой сквозные тесты, которые запускают среду; компилируют и загружают сборки и выполняют тесты на динамически скомпилированном коде.

Мне нужно выполнить фактические тесты в новом процессе PowerShell (чтобы сборки можно было каждый раз компилировать и загружать), поэтому я использую start-job для запуска тестов в фоновом режиме start-job и ожидания результатов receive-job -wait . Что-то вроде этого:

 Describe 'Run' {
        It 'StartJobTest'  {
            start-job -script {invoke-pester .MyTests.Tests.ps1} | receive-job -wait
        }
}
 

Все работает нормально, за исключением того, что я не могу получить статус успешного или неудачного теста, возвращаемый с задания, чтобы тест с вызовом pester мог быть отмечен как успешный или неудачный.

Кто-нибудь знает, как этого добиться. Я попробовал настроить $global:PesterPreference.Run.Exit = $true , но это не имело никакого значения.

Любая помощь или предложения с благодарностью принимаются,

Дэвид

Ответ №1:

Я думаю, вам нужно использовать переключатель-PassThru:

Возвращает пользовательский объект (PSCustomObject), содержащий результаты теста. По умолчанию Invoke-Pester записывает данные в основную программу, а не в выходной поток (stdout). Если вы попытаетесь сохранить результат в переменной, переменная будет пустой, если вы не используете PassThru параметр.

 Describe 'Run' {
    It 'StartJobTest' {
        $Results = Start-Job -Name Invoke-Pester -ScriptBlock {
            Invoke-Pester -Path '.MyTests.Tests.ps1' -PassThru
        } | Receive-Job -Wait -AutoRemoveJob
        
        $Results.FailedCount | Should -BeExactly 0
    }
}
 

P.S. В Pester v5 этот переключатель заменен на ConfigurationProperty Run.PassThru : https://pester.dev/docs/migrations/v4-to-v5

Комментарии:

1. Отлично… это сработало идеально. Спасибо.