Powershell Mock для модуля с соответствующим параметром возвращает ноль - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь использовать Powershell для насмешки Join-Path в модуле.Этот макет вернет местоположение TestDrive, но я продолжаю получать $ null вместо местоположения TestDrive.В моем примере модуль $ OutputPath возвращает значение NULL.Что я делаю не так с моим макетом?

foo.psm1

function foobar {
    $OutputPath = Join-Path -Path $PSScriptRoot -ChildPath '..\..\..\Output\'
    if (!(test-path $OutputPath) ) {
        $null = New-Item -ItemType directory -Path $OutputPath
    }
}

foo.Tests.ps1

import-module foo.psm1
Describe "Mock Example" {
    $TestLocation = New-Item -Path "TestDrive:\Output\" -ItemType Directory

    Mock -CommandName 'Join-Path' -MockWith { return $TestLocation.FullName } -ModuleName 'Foo' -ParameterFilter {$ChildPath -eq '..\..\..\Output\'}

}

1 Ответ

0 голосов
/ 07 октября 2018

Мне кажется, ваш код работает нормально.Я использовал Write-Host, чтобы проверить, что было значением $ OutputPath в функции, чтобы увидеть, что для него задан путь TestDrive.Я также использовал Assert-MockCalled, чтобы убедиться, что ваш макет вызывается:

function foobar {
    $OutputPath = Join-Path -Path $PSScriptRoot -ChildPath '..\..\..\Output\'
    Write-Host $OutputPath

    if (!(test-path $OutputPath) ) {
        $null = New-Item -ItemType directory -Path $OutputPath
    }
}

Describe "Mock Example" {
    $TestLocation = New-Item -Path "TestDrive:\Output\" -ItemType Directory

    Mock -CommandName 'Join-Path' -MockWith { $TestLocation } -ParameterFilter {$ChildPath -eq '..\..\..\Output\'}

    It 'Should work' {
        foobar | should -be $null
        Assert-MockCalled Join-Path
    }
}

Ваш код возвращает $null в соответствии с дизайном.

...