I had, for historic reasons, a setup on a group of specs: before(:all) do @contents = [%w(this that), %w(this other)] FasterCSV.stub!(:open).and_return(@contents) @filename = ''test_filename'' end When I ran the single file (spec spec/transformer/csv_spec.rb), all my specs passed. When I ran the whole project''s specs together (spec spec/), these failed. Changing before(:all) to before(:each) worked, but for reasons that are not clear to me. The before(:all) approach didn''t work because the FasterCSV stub wasn''t being set. Can someone explain why there would be different behavior between running one file and many files and before(:each) vs. before(:all)? As far as I understand it, I thought before(:all) was supposed to always run before a group of specs. Is it possible that a before (:all) doesn''t work right when calling multiple/all specs at the same time? Thanks
On Sat, Jan 10, 2009 at 1:59 PM, David Richards <drichards at showcase60.com> wrote:> > Can someone explain why there would be different behavior between > running one file and many files and before(:each) vs. before(:all)? > As far as I understand it, I thought before(:all) was supposed to > always run before a group of specs.It does, but not necessarily _immediately_ before. My rough guess would be that something in one of your other spec files called code that that required or reloaded FasterCSV, which blew away your stub when those other spec files were initialized after after this one. State changes hurt. -- Have Fun, Steve Eley (sfeley at gmail.com) ESCAPE POD - The Science Fiction Podcast Magazine http://www.escapepod.org
On Sat, Jan 10, 2009 at 12:59 PM, David Richards <drichards at showcase60.com> wrote:> I had, for historic reasons, a setup on a group of specs: > > before(:all) do > @contents = [%w(this that), %w(this other)] > FasterCSV.stub!(:open).and_return(@contents) > @filename = ''test_filename'' > end > > When I ran the single file (spec spec/transformer/csv_spec.rb), all my > specs passed. When I ran the whole project''s specs together (spec > spec/), these failed. Changing before(:all) to before(:each) worked, > but for reasons that are not clear to me. The before(:all) approach > didn''t work because the FasterCSV stub wasn''t being set. > > Can someone explain why there would be different behavior between > running one file and many files and before(:each) vs. before(:all)? > As far as I understand it, I thought before(:all) was supposed to > always run before a group of specs. Is it possible that a before > (:all) doesn''t work right when calling multiple/all specs at the same > time?Mocks and stubs get cleared out after each example, so you need to set them before each example. before(:all) should run once per group regardless of whether you''re loading one file or many. HTH, David> > Thanks > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >