我有一个看起来像这样的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
答案 0 :(得分:5)
这是a known problem与rspec:
let
s不适用于before(:all)
块
(来自Quoting的yet another ticket rspec贡献者myronmarston关于这个问题(这看起来与你在这里描述的行为非常相似)。)