Hi I''m upgrading an application to rspec2/rails3. A certain suite of tests, that generates a pdf document, uses a before(:all) filter to set the environment using mocks and stubs. Then the pdf gets generated and after that all the tests run on that same pdf document. In rspec2 it seems like I can only use mocks and stubs in in before(:each) filters (thus not in before(:all) filters). Has this been changed, or is this supposed to work (I may be doing something wrong)? Thanks
I know that generally it is not considered best practice to user before(:all) and after(:all) as state is shared between all examples, which is a unit-testing anti-pattern. The rspec book recommends setting up fixtures and environment for each example. Perhaps to drive this point home, support for this method has been dropped in rspec2? (just a guess) Bayard Randel nocturne.net.nz On 14 July 2010 00:25, Ivo Dancet <caifara.subscribe at gmail.com> wrote:> Hi > > I''m upgrading an application to rspec2/rails3. A certain suite of tests, > that generates a pdf document, uses a before(:all) filter to set the > environment using mocks and stubs. Then the pdf gets generated and after > that all the tests run on that same pdf document. In rspec2 it seems like I > can only use mocks and stubs in in before(:each) filters (thus not in > before(:all) filters). Has this been changed, or is this supposed to work (I > may be doing something wrong)? > > Thanks > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20100714/93087aa2/attachment.html>
David Chelimsky
2010-Jul-13 22:19 UTC
[rspec-users] before(:all) to set up mocks and stubs
On Jul 13, 2010, at 7:25 AM, Ivo Dancet wrote:> Hi > > I''m upgrading an application to rspec2/rails3. A certain suite of tests, that generates a pdf document, uses a before(:all) filter to set the environment using mocks and stubs. Then the pdf gets generated and after that all the tests run on that same pdf document. In rspec2 it seems like I can only use mocks and stubs in in before(:each) filters (thus not in before(:all) filters). Has this been changed, or is this supposed to work (I may be doing something wrong)?This should never have worked. Mocks and stubs are cleared out after each example, which means that even if you set them up before(:all), they''ll only be set for the first example that runs, after which they go away. It sounds like you were unknowingly exploiting an unintentional feature. HTH, David
Thanks for your answers. I''ll use a fixture replacement to set up the environment. I know that this (using before(:all) to setup a state) is not a best practice. In this case however, I would consider my approach to be acceptable as the pdf takes a long time to generate. All tests run on the same pdf so generating it 30 times would be a waste of time and effort. Using mocks and stubs made the generating part even more efficient. Making real objects will do the job just a tiny bit slower. I can live with that. Thanks again. Op 14-jul-2010, om 00:19 heeft David Chelimsky het volgende geschreven:> On Jul 13, 2010, at 7:25 AM, Ivo Dancet wrote: > >> Hi >> >> I''m upgrading an application to rspec2/rails3. A certain suite of tests, that generates a pdf document, uses a before(:all) filter to set the environment using mocks and stubs. Then the pdf gets generated and after that all the tests run on that same pdf document. In rspec2 it seems like I can only use mocks and stubs in in before(:each) filters (thus not in before(:all) filters). Has this been changed, or is this supposed to work (I may be doing something wrong)? > > This should never have worked. Mocks and stubs are cleared out after each example, which means that even if you set them up before(:all), they''ll only be set for the first example that runs, after which they go away. > > It sounds like you were unknowingly exploiting an unintentional feature. > > HTH, > David > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users