Пестерь: как я могу держать моего скрипта?


Я тестирую сценарий powershell. Я хотел бы протестировать отдельные функции без выполнения всего сценария. Я не уверен, является ли это предполагаемым случаем использования или поддерживается, я не нахожу хорошего ответа, ища онлайн

Ст. ps1:

    Param(
    [Parameter(Mandatory = $true, 
        Position = 0)]
    [ValidateNotNullOrEmpty()]
    [string] $Message
)

function fut([string] $argument) {
    Write-Host $argument
}

function Main() {
    fut($Message)
}

Main

Сут.тесты.пс1:

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '.Tests.', '.' 
. "$here$sut" "Message"

Describe "fut" {
    It "does something useful" {
        fut 'beer'
    }
}

Вывод

Message
Describing fut
beer
 [+] does something useful 385ms
Tests completed in 385ms

Теперь я могу издеваться над "пивом", потому что оно работает в блоке описания. но я не могу издеваться над "сообщением", потому что сценарий начинает выполняться, когда я ставлю точку в его источнике.

В моем case, "сообщение" - это операция, которую я не хочу выполнять

Я на Win10 15063

1 2

1 ответ:

Согласно комментариям, проблема заключается в том, что ваш скрипт является самоисполняющимся, поэтому его невозможно загрузить для pester через dot-sourcing без выполнения функций.

Обходной путь, предложенный Романом для временного использования set-alias для установки main в out-null, будет работать. Другое предложение состояло бы в том, чтобы отделить ваши функции в отдельный файл (например, с именем functions.ps1) , а затем в исходном сценарии вы можете использовать dot sourcing, чтобы включить его, но в тестовом сценарии просто dot source functions.ps1 файл.