RSpec首先读取上下文,然后读取(:all)。为什么?

时间:2012-01-18 01:40:36

标签: ruby-on-rails ruby debugging rspec

我的环境:

jruby-1.5.3
Rails 2.3.8
RSpec 1.3.1
Windows 7 (64-bit machine)

使用以下源代码运行Rspec,为什么rspec读取标有“=>”的行?这是语句before(:each)之前的上下文。任何帮助非常感谢

def save_env
  @host_os = Config::CONFIG['host_os']
end

def restore_env
  Config::CONFIG['host_os'] = @host_os
end

describe Manager::ManagerConfig do
  before(:each) do
    save_env
  end

  after(:each) do
    restore_env
  end

  context "Within Linus/Solaris environment" do
=>  Config::CONFIG['host_os'] = 'linux'

    it "should return the correct manager path under linux/solaris" do
      # bar
    end

    it "should return the correct license path under windows env" do
      # foo
    end
  end
end

1 个答案:

答案 0 :(得分:3)

一个上下文设置了一个内部类,因此其中的行将在加载时执行,除了每个itbeforeafter创建一个代码块这将在稍后执行。

您需要做的就是将配置设置包装在自己的before(:each)块中,顺序将是您所期望的:外部before(:each),然后内部before(:each),然后it

before(:each) do
  Config::CONFIG['host_os'] = 'linux'
end