我有一组pester测试,用于使用v4.0+ should操作符-FileContentMatch的PowerShell模块。当这些测试在带有早期版本的pester的机器上运行时,会出现一波错误消息,没有一条能准确地指出问题所在。
我想编写一个简单的pester测试,以检查最低版本,并为用户/测试人员打印一个解释/修复。
更复杂的是,pester可以直接作为脚本运行,而无需作为模块安装在机器上。
我看过使用$(Get-Module -ListAvailable -name "Pester").version提取pester版本,但它只看到PowerShell-“已安装”模块,而不是当前正在执行的版本,正如前面提到的,可能有所不同。
从pester传递的一些信号是可以的,但我不认为pester为测试脚本(即版本环境变量)提供了任何元信息。
对解决方案有什么想法吗?
发布于 2019-09-03 09:33:59
您希望检查当前加载的pester模块版本的代码如下所示:
$pesterModules = @( Get-Module -Name "Pester" -ErrorAction "SilentlyContinue" );
if( ($null -eq $pesterModules) -or ($pesterModules.Length -eq 0) )
{
throw "no pester module loaded!";
}
if( $pesterModules.Length -gt 1 )
{
throw "multiple pester modules loaded!";
}
if( $pesterModules[0].Version -ne ([version] "4.8.0") )
{
throw "unsupported pester version '$($pesterModules[0].Version)'";
}但是选择在哪里运行它要稍微复杂一些--如果你可以在一个纠缠测试中运行它,这将给你当前运行测试的版本。
Describe "check test suite version" {
Context "pester version" {
It "should be correct version" {
... version check code here ...
}
}
}但是,不管是否加载了正确的版本,这仍然会运行您的主要测试,因此如果加载了错误的版本,您可能会得到大量的背景噪声。
您可以运行上面的测试作为您的主要测试的试飞前检查-调用Invoke-Pester与-PassThru开关检查结果,并只调用您的主要测试,如果试飞前测试通过。
或者自己从一个已知的位置加载pester模块,然后调用上面的代码块来验证版本。
发布于 2019-08-30 22:30:56
从ModuleVersion中读取模块清单。
您可以阅读清单的主要版本如下:
$PesterMajorVersion=(Get-Content path\to\Pester\Pester.psd1|sls ModuleVersion).Line -replace ".*'([\d])+\..*'",'$1'https://stackoverflow.com/questions/57733313
复制相似问题