gpt4 book ai didi

powershell - Pester:如何阻止我的脚本运行?

转载 作者:行者123 更新时间:2023-12-02 22:39:37 26 4
gpt4 key购买 nike

我正在测试 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

现在我可以模拟 'beer',因为它在 describe 块中运行。但是我不能 mock “消息”,因为脚本在我点源它时开始执行。

就我而言,“消息”是我不想执行的操作。

我使用的是 Windows 10 15063。

最佳答案

根据评论,问题在于您的脚本是自动执行的,因此不可能在不执行功能的情况下通过点源为 Pester 加载它。

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

关于powershell - Pester:如何阻止我的脚本运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com