5

我有一个规格文件,如下所示:

# 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

4

1 回答 1

5

这是rspec的一个已知问题:

lets 不是为与before(:all)块一起使用而设计的

(从关于该问题的另一张票中引用rspec 贡献者 myronmarston (这似乎与您在此处描述的行为非常相似))。

于 2012-10-22T04:58:41.257 回答