#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 при использовании хэш-таблицы для тестовых наборов. Каждый ключ в хэш-таблице автоматически получит переменную.