Почему не этот издевательство над Пестером 3.4? - PullRequest
0 голосов
/ 14 марта 2020

У меня есть модуль Powershell 5.1, подобный этому:

function CheckEventViewerForErrors(
    [string] $logName,
    [string] $logSource,
    [System.DateTime] $dateGreaterThanFilter
) {
    try {
        $logs = Get-EventLog -LogName $logName -Source $logSource 
        $errorLogs = $logs | Where-Object { 
                ($_.TimeGenerated -gt $dateGreaterThanFilter) `
                -and `
                ($_.EntryType -eq 'Error')
            }
        if ($null -ne $errorLogs) {
            return $true
        }
        return $false
    }
    catch {
        return $true
    }
}


Export-ModuleMember -Function "*"

, который я хочу протестировать с помощью Pester 3.4.0, как показано ниже, но при использовании параметра закомментированного не вызывается mock фильтр.

Describe 'CheckEventViewerForErrors' {
    $logName = 'Application'
    $logSource = "Pester"
    $time = Get-Date
    $cmdToMock = 'Get-EventLog'
    $moduleName = $module.Name

    Context 'Tests using mocks' {
        # $paramFilter = { ($LogName -eq $logSource) -and ($LogName -eq $logName) }

        It 'returns $false when there are entries for the source but no errors' {
            Mock `
                -ModuleName $moduleName `
                -CommandName $cmdToMock `
                -MockWith { return @{ TimeGenerated = $time; EntryType = 'Error' } } 
                # -ParameterFilter $paramFilter 

            $expected = $false                

            [bool] $actual = CheckEventViewerForErrors `
                -logName $logName `
                -logSource $logSource `
                -dateGreaterThanFilter $time

            Assert-MockCalled -Module $moduleName -CommandName $cmdToMock # -ParameterFilter $paramFilter 
            $actual | Should Be $expected
        }
    }     
}   

Что не так с этим кодом ?. Как я могу издеваться над использованием Get-EventLog в экспортированной функции?

Это сообщение возвращается с помощью вышеуказанного теста:

Expected Get-EventLog to be called at least 1 times but was called 0 times

1 Ответ

1 голос
/ 15 марта 2020

В вашем фильтре параметров есть ошибка, вы фильтруете LogName дважды, но с разными переменными (следовательно, это не приводит к совпадению использования Get-EventLog в скрипте):

$paramFilter = { ($LogName -eq $logSource) -and ($LogName -eq $logName) }

Если я поменяю его на этот, у меня работает код:

$paramFilter = { ($LogSource -eq $logSource) -and ($LogName -eq $logName) }
...