我对RSpec没有多少经验,我不打算传播一个真正的任务,但如果我遇到的问题会大大简化,看起来像这样:
describe "Test" do
context "ctx_1" do
before(:all) do
# Changes of $x from "nil" to a some NOT an earlier predefined instance.
# A real case supposes getting this variable from other execution part.
# It is very essential.
$x = [1, 2, 3]
end
$x.each do |e|
context "ctx_2"
before (:all) do
puts "do a some things for #{e}"
end
it "example #{$x.index(e)}" do
puts "do some checking for #{e}"
end
end
end
end
end
有没有办法将“ctx 2”包装到一个没有兑现值(零)的新的$ x值的循环中? 问题是$ x的更新值仅在“it”块内有效。与其他entytyes(@而不是$,describe,context,before等)的任何变化都不会通过..
答案 0 :(得分:0)
您对代码的运行方式和时间感到困惑:
before
阻止在测试运行之前运行 。
context
块在测试声明阶段运行 - 比之前更早,比分配$x
时更早。
这就是为什么当你做$x.each
时,你会得到“无法”。作为$x
值。在 $x.each
块之后,before
循环永远不会运行,因此您需要重新设计代码。
您可以在$x
spec_helper.rb
设置为配置的一部分