Я пытаюсь внедрить фреймворк BDD, подобный RSpec/Jasmine, в Powershell (или, по крайней мере, исследовать потенциальные проблемы с его созданием ).
В настоящее время у меня проблемы с реализацией простых функций до/после. Учитывая
$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(см. обходной путь ), но я не уверен, как он работает и помогает ли он мне каким-либо образом.
ТИА