On Oct 12, 2011, at 2:09 PM, nathanvda wrote: > Nobody? > > On Oct 11, 1:05 pm, nathanvda <nathan...@gmail.com> wrote: >> I have a simple controller test, containing a.o. the following code: >> >> context "POST :create" do >> before (:each) do >> post :create, :user_id => @user.id, >> :account => { .. some data ... } >> end >> it { response.status.should == 201 } >> it { response.location.should be_present } >> end >> >> Now I thought of a very simple way to speed up this test, and to use a >> `before(:all)` instead of a `before(:each)`. In that case the POST >> would only be done once. >> >> So i wrote: >> >> context "POST :create" do >> before (:all) do >> post :create, :user_id => @user.id, >> :account => { .. some data ... } >> end >> it { response.status.should == 201 } >> it { response.location.should be_present } >> end >> >> But then I get the following errors: >> >> RuntimeError: >> @routes is nil: make sure you set it in your test's setup >> method. >> >> Is this by design?
Yes. rspec-rails wraps the rails' testing framework which doesn't have a before(:all) concept in it, so all the data is reset before each example. Even if we wanted to support this in rspec-rails (which I don't) it would require changes to rails first. >> Is there a way to circumvent it? Not really. I'd just stick them in a single example: describe "POST create" do it "responds with a 201 and a location" do post :create, :user_id => @user.id, :account => { .. some data ... } response.status.should eq(201) response.location.should be_present end end This violates the "one expectation per example" guideline, but a) that's just a guideline, and b) the real benefit of following the guideline is that it tends to limit you to one event per example (which is a GOOD thing). If that event has multiple outcomes to check, however, I see little benefit in this guideline. HTH, David _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users