PowerShell: модульный тест Пестера с блоками до / после - PullRequest
2 голосов
/ 07 ноября 2019

Я учусь проводить модульные тесты с Пестером, и у меня странная проблема с блоками До / После. Код моего модульного теста приведен ниже:

 Describe "Before/After Blocks" {

        Context "BeforeEach/AfterAll" {

            BeforeAll {
                $value = 0
                Write-Host "->Initial value is $value"
            }

            BeforeEach {
                $value++
            }

            It "value is 1" {
                $value | Should -Be 1
            }

            It "value is 2" {
                $value | Should -Be 2
            }

            It "value is 3" {
                $value | Should -Be 3
            }

            AfterAll {
                Write-Host "->Final value is $value"
            }
        }
    }

Итак, как вы можете видеть из кода, моя цель - инициализировать переменную и посмотреть, как она увеличивается с помощью блока BeforeEach. Это вывод:

Context BeforeEach / AfterAll

-> Начальное значение 0

[+] value is 1 

[+] value is 2 

[+] value is 3 

-> Конечное значение 0

Переменная инициализируется равной 0, и перед тем, как любой ее блок будет увеличиваться, утверждения не потерпели неудачу. Но блок AfterAll сообщает, что значение переменной равно 0, начальное значение, а не 3, как я ожидаю.

Почему?

Спасибо.

1 Ответ

0 голосов
/ 11 ноября 2019

Кажется, проблема в том, что блок AfterAll имеет свою собственную область (что, я согласен, немного странно). Вы можете получить ожидаемый результат, используя глобальные переменные, хотя это не очень хорошая практика:

Describe "Before/After Blocks" {

    Context "BeforeEach/AfterAll" {

        BeforeAll {
            $global:value = 0
            Write-Host "->Initial value is $value"
        }

        BeforeEach {
            $global:value++
        }

        It "value is 1" {
            $global:value | Should -Be 1
        }

        It "value is 2" {
            $global:value | Should -Be 2
        }

        It "value is 3" {
            $global:value | Should -Be 3
        }

        AfterAll {
            Write-Host "->Final value is $global:value"
        }
    }
}
...