【发布时间】:2012-07-29 07:45:02
【问题描述】:
我正在尝试在 Powershell 中实现 RSpec/Jasmine 之类的 BDD 框架(或者至少研究制作一个的潜在问题)。
目前我在实现简单的前后功能时遇到问题。给定
$ErrorActionPreference = "Stop"
function describe()
{
$aaaa = 0;
before { $aaaa = 2; };
after { $aaaa; }
}
function before( [scriptblock]$sb )
{
& $sb
}
function after( $sb )
{
& $sb
}
describe
输出是 0,但我希望它是 2。有什么方法可以在 Powershell 中实现它(没有使 $aaaa 全局化,遍历脚本块中的父作用域直到找到 $aaaa,使 $aaaa 成为“对象”和其他肮脏的黑客:) )
理想情况下,我想要一种在其他范围内调用脚本块的方法,但我不知道这是否可能。我在 https://connect.microsoft.com/PowerShell/feedback/details/560504/scriptblock-gets-incorrect-parent-scope-in-module 找到了一个有趣的示例(请参阅解决方法),但不确定它是如何工作的,以及它是否对我有任何帮助。
TIA
【问题讨论】:
-
你看过 Pester 吗:github.com/scottmuc/pester
-
是的,它不像RSpec/Jasmine,可能是因为上面描述的问题。我在 Pester 方面的经验非常有限,但恕我直言,Pester 是一个非常有限的框架,没有后/前、没有嵌套描述、损坏的匹配器实现等。
-
然后考虑贡献:)
-
我肯定会考虑做出贡献,目前我只是在评估在 PowerShell 中实现更好版本的可能性——这可能是不可能的,而 Pester 就是这样,因为在考虑之后做出了有意识的设计决策PowerShell 限制。
-
我对 PowerShell 的 BDD 框架的看法:github.com/mbergal/Jester。注意:正在进行中
标签: powershell scope