使用-ParameterFilter时未调用Get -Etate的模拟



我已经创建了一个新的佩斯特灯具,并试图模拟对Get-Date CMDLET的调用,但它不起作用。如果我不使用-ParameterFilter

,它确实有效

假人.ps1

function dummy {
    return Get-Date -f "dd"
}

dummy.tests.ps1

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '.Tests.', '.'
. "$here$sut"
Describe "dummy" {
    Mock Get-Date { return "01" } -Verifiable -ParameterFilter {$f -match "dd"}
    It "does something useful" {
        dummy
        Assert-VerifiableMocks 
    }
}

输出

Describing dummy
 [-] does something useful 99ms
   RuntimeException:  Expected Get-Date to be called with $f -match "dd"
   at Assert-VerifiableMocks, C:Program FilesWindowsPowerShellModulesPester3.4.0FunctionsMock.ps1: line 434
   at <ScriptBlock>, E:…dummy.Tests.ps1: line 11
Tests completed in 99ms
Passed: 0 Failed: 1 Skipped: 0 Pending: 0 Inconclusive: 0

我尝试使用-eq而不是-match对于-ParameterFilter没有区别。

我觉得我必须在非常基本的层面上做错了什么,但是看不到 - 有人可以帮助我吗?

如果有任何区别,这是在Windows 10虚拟机上;$PSVersionTable的输出为:

Name                           Value                                                                                        
----                           -----                                                                                        
PSVersion                      5.1.14393.1198                                                                               
PSEdition                      Desktop                                                                                      
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                      
BuildVersion                   10.0.14393.1198                                                                              
CLRVersion                     4.0.30319.42000                                                                              
WSManStackVersion              3.0                                                                                          
PSRemotingProtocolVersion      2.3                                                                                          
SerializationVersion           1.1.0.1

此问题之所以发生,是因为您使用$f表示-format参数。-f-format的常用短手(以及您在功能中使用的内容(,但似乎需要使用完整的参数名称:

Mock Get-Date { return "01" } -Verifiable -ParameterFilter {$format -match "dd"}

返回:

Describing dummy
 [+] does something useful 31ms

最新更新