On Oct 12, 2011, at 2:09 PM, nathanvda wrote:
> Nobody?
>
> On Oct 11, 1:05 pm, nathanvda <[email protected]> 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
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users