Pester Mock Get-Date не вызывается при использовании -ParameterFilter

Я создал новый прибор Pester и пытаюсь имитировать вызов Get-Date CmdLet, но он не работает. Это сработает, если я не использую -ParameterFilter.

dummy.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 Files\WindowsPowerShell\Modules\Pester\3.4.0\Functions\Mock.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

person Zoodor    schedule 02.06.2017    source источник


Ответы (1)


Эта проблема возникает из-за того, что вы используете $f для представления параметра -format. -f - это обычно используемое сокращение для -format (и того, что вы используете в своей функции), но, похоже, для работы Mock вам нужно использовать полные имена параметров:

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

Возврат:

Describing dummy
 [+] does something useful 31ms
person Mark Wragg    schedule 02.06.2017