2017-01-17 1 views
1

Je rencontre un problème avec le test unitaire d'une ressource DSC basée sur la classe. J'essaie de simuler quelques fonctions dans la classe et j'obtiens une erreur de distribution.Unité Test d'une ressource DSC de classe avec Pester

PSInvalidCastException: Cannot convert the "bool TestVMExists(string vmPath,  
string vmName)" value of type "System.Management.Automation.PSMethod" to type 
"System.Management.Automation.ScriptBlock". 

Mon code de test est la suivante:

using module 'C:\Program Files\WindowsPowerShell\Modules\xVMWareVM\xVMWareVM.psm1' 

$resource = [xVMWareVM]::new() 

    Describe "Set" { 

    Context "If the VM does not exist" { 

     Mock xVMWareVM $resource.TestVMExists {return $false} 
     Mock xVMWareVM $resource.CreateVM 

     It "Calls Create VM once" { 
      Assert-MockCalled $resource.CreateVM -Times 1 
     } 
    } 
} 

Est-ce que quelqu'un sait comment y parvenir?

Merci à l'avance

+0

Vous ne savez pas à quoi ressemble la ressource, mais la première idée: 'InModuleScope xVMWareVM {}' autour du code? – BartekB

Répondre

2

Vous ne pas encore être en mesure de se moquer d'une fonction de classe à l'aide Pester. La solution de contournement actuelle consiste à utiliser Add-Member -MemberType ScriptMethod pour remplacer la fonction. Cela signifie que vous n'obtiendrez pas les prétendues affirmations.

J'ai emprunté ceci pour DockerDsc tests by @bgelens.

Sans votre code de classe, je n'ai pas pu tester cela, mais il devrait vous donner l'idée avec le code @bgelens ci-dessus.

using module 'C:\Program Files\WindowsPowerShell\Modules\xVMWareVM\xVMWareVM.psm1' 

    Describe "Set" { 

    Context "If the VM does not exist" { 
     $resource = [xVMWareVM]::new() 
     $global:CreateVmCalled = 0 
     $resource = $resource | 
      Add-Member -MemberType ScriptMethod -Name TestVMExists -Value { 
        return $false 
       } -Force -PassThru 
     $resource = $resource | 
      Add-Member -MemberType ScriptMethod -Name CreateVM -Value { 
        $global:CreateVmCalled ++ 
       } -Force -PassThru 

     It "Calls Create VM once" { 
      $global:CreateVmCalled | should be 1 
     } 
    } 
} 
+1

Merci beaucoup, cela fait exactement ce que je veux :) – Carl