2017-06-02 5 views
3

J'ai créé un nouvel appareil Pester et j'essaie de simuler un appel au Get-Date CmdLet, mais cela ne fonctionne pas. Cela fonctionne si je n'utilise pas -ParameterFilter.Pester Mock de Get-Date non appelé lors de l'utilisation de -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 
    } 
} 

Sortie

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 

J'ai essayé d'utiliser -eq au lieu de -match pour la -ParameterFilter sans différence. Je sens que je dois faire quelque chose de mal à un niveau très basique, mais je ne peux pas le voir - quelqu'un peut-il m'aider?

Si cela fait une différence, c'est sur une machine virtuelle Windows 10; la sortie de $PSVersionTable est:

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 

Répondre

3

Ce problème se produit parce que vous utilisez $f pour représenter le paramètre -format. -f est une courte main couramment utilisé pour -format (et ce que vous utilisez dans votre fonction), mais apparemment pour la Mock marche, vous devez utiliser les noms complets des paramètres:

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

Retours:

Describing dummy 
[+] does something useful 31ms 
+0

Cela semble être exactement le problème - merci! – Zoodor