Пестерь: как я могу держать моего скрипта?
Я тестирую сценарий 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 ответ:
Согласно комментариям, проблема заключается в том, что ваш скрипт является самоисполняющимся, поэтому его невозможно загрузить для pester через dot-sourcing без выполнения функций.
Обходной путь, предложенный Романом для временного использования
set-alias
для установкиmain
вout-null
, будет работать. Другое предложение состояло бы в том, чтобы отделить ваши функции в отдельный файл (например, с именемfunctions.ps1
) , а затем в исходном сценарии вы можете использовать dot sourcing, чтобы включить его, но в тестовом сценарии просто dot sourcefunctions.ps1
файл.