Powershell Pester参数筛选器与调用的Assert MockFilter不匹配
我们正在尝试检查CmdLetPowershell Pester参数筛选器与调用的Assert MockFilter不匹配,powershell,mocking,assert,pester,Powershell,Mocking,Assert,Pester,我们正在尝试检查CmdLetStart ScheduledTask对于特定的计划任务是否只调用了一次。但由于某种原因,参数过滤器不匹配 代码 $here = Split-Path -Parent $MyInvocation.MyCommand.Path $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.' Function New-TaskObjectsHC { Param (
Start ScheduledTask
对于特定的计划任务是否只调用了一次。但由于某种原因,参数过滤器
不匹配
代码
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
Function New-TaskObjectsHC {
Param (
[Parameter(Mandatory, ValueFromPipeline)]
[HashTable[]]$Hash
)
Process {
foreach ($H in $Hash) {
$Obj = New-Object -TypeName 'Microsoft.Management.Infrastructure.CimInstance' -ArgumentList @('MSFT_ScheduledTask')
$H.GetEnumerator() | ForEach-Object {
$Obj.CimInstanceProperties.Add([Microsoft.Management.Infrastructure.CimProperty]::Create($_.Key,$_.Value, [Microsoft.Management.Infrastructure.CimFlags]::None))
}
$Obj
}
}
}
Describe 'Monitor sheduled tasks' {
it 'test' {
Mock Get-ScheduledTask {
@(
@{
TaskName = 'My task'
State = 'Running'
}
) | New-TaskObjectsHC
}
Mock Start-ScheduledTask
Start-ScheduledTask -InputObject (Get-ScheduledTask)
Assert-MockCalled Start-ScheduledTask -Scope it -Times 1 -ParameterFilter {
($TaskName -eq 'My task')
}
}
}
当我们删除参数filter
时,可以清楚地看到CmdLet已被调用一次。所以我假设过滤器中一定有语法错误。问题已修复:
Assert-MockCalled Start-ScheduledTask -Scope it -Times 1 -ParameterFilter {
($InputObject.TaskName -eq 'My task')
}