我正在测试PowerShell脚本。我想在不执行整个脚本的情况下测试各个函数。我不确定这是否是预期的用例或支持,我找不到一个在线搜索的好答案
Param(
[Parameter(Mandatory = $true,
Position = 0)]
[ValidateNotNullOrEmpty()]
[string] $Message
)
function fut([string] $argument) {
Write-Host $argument
}
function Main() {
fut($Message)
}
Main
$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上。
答案 0 :(得分:3)
根据评论,问题是您的脚本是自动执行的,因此无法通过点源为Pester加载它而不执行这些功能。
罗马建议暂时使用Set-Alias
将main
设置为Out-Null
的解决方法可行。另一个建议是将您的函数分离到一个单独的文件(例如名为functions.ps1
),然后在原始脚本中,您可以使用点源来包含它,但在您的测试脚本中只需点源functions.ps1
文件。