Смешайте обнаружение pester и переменные запуска

#powershell #pester

#powershell #pester

Вопрос:

У меня есть этот блок сценария pester. Когда я запускаю его, «Test1» завершается с ошибкой, что хорошо. Второй «Тест2» завершается неудачей, но я хочу, чтобы он прошел. Для pester 5 это рекомендации:

`Поместите в него весь свой код, beforeAll, beforeEach, AfterAll или afterEach. Не помещайте код непосредственно в Describe, Context или в начало вашего файла, не заключая его в один из этих блоков, если у вас нет веской причины для этого.

Весь неуместный код будет выполняться во время обнаружения, и его результаты не будут доступны во время выполнения. `

Это объясняет, почему мой «Test2» завершается с ошибкой. Но если я помещу свой код в один из предложенных блоков, я не смогу использовать тестовые сценарии.

Есть ли способ решить проблему?

 Describe "Sample" {
    $test = 1
    $testCase = @(
        @{var1 = $test; ExpectedResult = $true})

    It "Test1" -Tag "Update" -TestCase $testCase {
     param ($var1, $expectedresult)
        $var1 | should -be $null
        $test | should -be 1
    }

    it "Test2" -Tag "Fail" {
        $test | should -be 1
    }
}
  

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

1. Совет поместить ваш код внутри одного из этих блоков предназначен практически для всего . Одна вещь, которую вы можете и должны делать во время обнаружения, — это создавать свои тестовые примеры. Тестовые примеры являются исключением из правила и сохраняются, когда Pester выполняет ваши тесты. Подумайте об этом так: Pester сканирует файл на наличие тестов перед их запуском во время обнаружения. Поскольку вы создали эти тесты и передали их в качестве параметра в тест, он находит их как часть теста, и они остаются доступными для использования.

Ответ №1:

Как упоминает @Efie, код для создания тестовых наборов является общим исключением из правила. В BeforeDiscovery Pester 5.1 был добавлен новый блок, который следует использовать для этого типа кода.

В общем, вам редко следует смешивать проблемы, связанные с повторным использованием $test в вашем тесте. Ваши тестовые наборы должны включать требуемые переменные. На самом деле, именно так вы бы передали переменную из Discovery в Run, чтобы сделать это возможным, предоставив ее в качестве значения testcase . В вашем примере вы это сделали, поэтому $var1 оно должно быть доступно в тесте и должно быть равно 1 (так же, как $test в Discovery).

Я часто называю ключ хэш-таблицы так же, как и переменную обнаружения ( test в этом сценарии), чтобы сделать передачу плавной.

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

1. Кроме того, нет необходимости в param($var1, $expectedresult) блоке в Pester v5 при использовании хэш-таблицы для тестовых наборов. Каждый ключ в хэш-таблице автоматически получит переменную.