RSpec:如何抑制变量缓存

时间:2014-04-27 08:00:09

标签: ruby rspec

我对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等)的任何变化都不会通过..

1 个答案:

答案 0 :(得分:0)

您对代码的运行方式和时间感到困惑:

  • before阻止在测试运行之前运行

  • context块在测试声明阶段运行 - 比之前更早,比分配$x时更早。

这就是为什么当你做$x.each时,你会得到“无法”。作为$x值。在 $x.each块之后,before循环永远不会运行,因此您需要重新设计代码。

您可以在$x

中将spec_helper.rb设置为配置的一部分