我们正在尝试找出如何在mock
中Pester
使用点源脚本。
Script1.ps1
$Import = @('Script 1 data')
. 'C:\Script2.ps1' -JobName 'Script 2 data'
$Import
Script2.ps1
Param (
[String]$JobName
)
$Import += $JobName
输出
Script 1 data
Script 2 data
在上面的示例中,Script2.ps1
已在单独的Pester
测试文件(Script2.Tests.ps1
)中进行了测试。对于Script1.ps1
的测试,我们仅需要评估是否调用了其他脚本。
在Script1.ps1
中,我们明确使用点源,以确保已更改/更新的变量返回当前范围。
一种方法是使用Function
,其唯一目的是调用Script2.ps1
,然后可以轻松地对其进行嘲笑。但是,在这种情况下,变量修改会卡在功能范围内。
评估脚本是否已被调用并仍然确保变量返回当前范围的最佳方法是什么?
答案 0 :(得分:1)
好吧,您有一个Return
关键字,可用于在您的案例中跨范围发送数据。您可以在所讨论的函数内部使用Return
或Script2.ps1
本身。您无需在另一个脚本中修改变量。取而代之的是,将值传递给它,在Script2
中进行本地修改,Return
到Script1
中,在其中获取修改后的值。
脚本1
$Import = @('Script 1 data')
$ModValue = . 'C:\Script2.ps1' -JobName 'Script 2 data'
$Import += $ModValue
$Import
脚本2
Param (
[String]$JobName
)
#do what you need to do here
$modifiedvalue = $JobName #For the sake of demo i am doing this.
Return $modifiedvalue #Where $modifiedvalue is what you want to send back to script1
输出
Script 1 data
Script 2 data
如果需要,可以在script2中添加错误处理,也可以将错误消息返回给Script1。在这种情况下,检查$ModValue
的值可以使您更好地控制脚本2中发生的情况。
Param (
[String]$JobName
)
try
{
#do what you need to do here
$modifiedvalue = $JobName #For the sake of demo
Return $modifiedvalue #Where $modifiedvalue is what you want to send back to script1
}
catch
{
Return $_.Exception.Message
}