Pester 5.50 测试每个块的范围

问题描述 投票:0回答:1
param (
    [Parameter()]
    $ParameterPath = "Approved-rule.json"
)

# BeforeDiscovery {
#     ## Store the data from the json file to be re-used
#     $parameterFile = Get-Content $ParameterPath  
# }

Describe "Rules validation (Base)" -Tag "CI" {
    BeforeAll {
        $parameterFile = Get-Content $ParameterPath 
        $incommingParamObject = $parameterFile.Parameters
        $rules = $parameterFile.Parameters.Test.value
    }
    Context "Validate for Parameter" {

        It "File should not be null or empty" {
            Write-Host "rule: $($rules)"
            $rules | Should -Not -BeNullOrEmpty
        }
    }

}

当我运行 pester 脚本时,规则为空值。 pester 中的作用域是如何工作的 BeforeAll 块是全局的还是我应该添加 BeforeDiscovery?

另一个问题我应该在哪里添加内联函数?

运行上面的 pester 代码时,所有变量都被打印为 null。该文件以正确的路径存在。

powershell pester-5
1个回答
0
投票

您的

It
语句中存在拼写错误,应该是
$rules
而不是
$rule
,并且您的
ConvertFrom-Json
所有块中缺少
BeforeAll
,那么您的代码应该可以正常工作。

以这个Json为例:

  • Approved-rule.json
{
  "Parameters": {
    "Test": {
      "value" : [
        "foo",
        "bar",
        "baz"
      ]
    }
  }
}

以及 Pester 测试代码:

param (
    [Parameter()]
    $ParameterPath = 'Approved-rule.json'
)

Describe 'Rules validation (Base)' -Tag 'CI' {
    BeforeAll {
        $parameterFile = Get-Content $ParameterPath | ConvertFrom-Json
        $incommingParamObject = $parameterFile.Parameters
        $rules = $parameterFile.Parameters.Test.value
    }
    Context 'Validate for Parameter' {
        It 'File should not be null or empty' {
            Write-Host "rule: $($rules)"
            $rules | Should -Not -BeNullOrEmpty
        }
    }
}

运行时你可以得到:

Starting discovery in 1 files.
Discovery found 1 tests in 75ms.
Running tests.
rule: foo bar baz
[+] C:\Users\User\Documents\pwsh\Pester.test.ps1 240ms (65ms|103ms)
Tests completed in 250ms
Tests Passed: 1, Failed: 0, Skipped: 0 NotRun: 0
© www.soinside.com 2019 - 2024. All rights reserved.