Pester:我如何防止脚本运行?

时间:2018-01-30 01:35:27

标签: powershell pester

我正在测试PowerShell脚本。我想在不执行整个脚本的情况下测试各个函数。我不确定这是否是预期的用例或支持,我找不到一个在线搜索的好答案

sut.ps1:

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

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

function Main() {
    fut($Message)
}

Main

sut.tests.ps1:

$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

现在我可以嘲笑'啤酒',因为它在描述块中运行。但我不能嘲笑'消息',因为当我点源它时脚本开始执行。

在我的情况下,'message'是我不想执行的操作。

我在Windows 10 15063上。

1 个答案:

答案 0 :(得分:3)

根据评论,问题是您的脚本是自动执行的,因此无法通过点源为Pester加载它而不执行这些功能。

罗马建议暂时使用Set-Aliasmain设置为Out-Null的解决方法可行。另一个建议是将您的函数分离到一个单独的文件(例如名为functions.ps1),然后在原始脚本中,您可以使用点源来包含它,但在您的测试脚本中只需点源functions.ps1文件。