Mam plik spec, który wygląda następująco:let() wartość buforowana na przykładach, gdy poprzednio (: wszystkie) jest używane?
# 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
Oba przykłady są przechodzącej zgodnie z oczekiwaniami. Zanim jednak gdybym un-skomentować (all), drugi przykład nie:
1) Foo test two
Failure/Error: it { should == 'two' }
expected: "two"
got: "one" (using ==)
AFAIK, wartość let() będą buforowane w wielu połączeń w tym samym przykład, ale nie w poprzek przykładów. Więc nie do końca wiadomo, dlaczego zawodzi drugi przykład, gdy użyto przed (: wszystkie).
Używam rubin 1.9.2p180 i rspec 2.6.4
Ogólnie rzecz biorąc, użycie 'before (: all)' jest okropnym pomysłem, który powoduje wiele bólu i problemów. –
+1. Jest impet, aby całkowicie go zabić: https://github.com/rspec/rspec-core/issues/573 – pje
powiązane: http://stackoverflow.com/questions/12906268/rspec-rails-and-using-let-leading do konfliktów zmiennych – pje