当使用before(:all)时,let()值在示例中缓存?

时间:2012-10-22 04:25:09

标签: ruby testing rspec

我有一个看起来像这样的spec文件:

# foo_spec.rb
class Foo
end

describe Foo do
  let(:foo) { 'foo' }
  subject { bar }

  # before(:all) { foo } # The seond example fails if uncomment this line.

  describe 'test one' do
    let(:bar) { 'one' }
    it        { should == 'one' }
  end

  describe 'test two' do
    let(:bar) { 'two' }
    it        { should == 'two' }
  end
end

两个示例都按预期传递。但是,如果我取消注释before(:all),则第二个示例将失败:

1) Foo test two
     Failure/Error: it        { should == 'two' }
       expected: "two"
            got: "one" (using ==)

AFAIK,let()的值将缓存在同一示例中的多个调用中,但不会跨示例进行缓存。因此,当使用before(:all)时,不太清楚为什么它会失败第二个例子。

我正在使用ruby 1.9.2p180和rspec 2.6.4

1 个答案:

答案 0 :(得分:5)

这是a known problem与rspec:

  

let s不适用于before(:all)

(来自Quotingyet another ticket rspec贡献者myronmarston关于这个问题(这看起来与你在这里描述的行为非常相似)。)