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。该文件以正确的路径存在。
您的
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