How to provide multiple mocks to pester?

This topic contains 1 reply, has 2 voices, and was last updated by  Don Jones 5 months ago.

  • Author
    Posts
  • #70636

    John
    Participant

    Hi,
    I'm a newbie to Pester so please forgive me if this has been answered already. I want to run multiple unit tests on a PowerShell function, providing a range of mocks to exercise the function. Below is the function and test code I've written. I'd like to mock Get-WASJob multiple times, providinga seperate mock to each unit test.
    How do I do this?
    Thanks,
    John

    Function GetWASJob {
        param ( [string]$project, [string]$job, [string]$os, [string]$runtype )
        $runjob = Get-WASJob -ProjectName $project -JobName $job -ErrorAction Stop
    
        #Check if the WAS job is valid
        if ($runjob -and $runjob.JobName) {
            WriteToLog "GetWASJob: Returned a valid WAS job" $logfile
        }
        else {
            WriteToLog "GetWASJob: Valid WAS job not returned...Quit" $logfile
            break
        }
        return $runjob
    }

    Pester code to test the above function:

    Describe "GetWASJob" {
        Context "Just Testing..." {
            Mock Get-WASJob {
                $obj = New-MockObject -Type 'Microsoft.Assessments.WAS.PowerShell.WASJob'
                $obj | Add-Member -Type NoteProperty -Name 'JobName' -Value 'PesterJob1' -Force
                $obj | Add-Member -Type NoteProperty -Name 'Tags' -Value 'PesterTag1' -Force
                return $obj
            }
    
        	$result = GetWASJob -project "Project1" -job "Job1" -os "Windows10" -runtype "Production"
    
    	    It "Verified that all mocks were called" {
    	        Assert-VerifiableMocks
    	    }
    	    It "Checks that a valid job object was returned" {
                $result.JobName | Should Be "PesterJob1"
    	    }
        }
    }
  • #70858

    Don Jones
    Keymaster

    If I'm understanding what you want, you'd use multiple Context blocks for each scenario.

You must be logged in to reply to this topic.