[rspec-users] render_template failure

Toni Tuominen tjtuom at utu.fi
Sat Sep 4 16:15:07 EDT 2010


Capybara is not a rails-specific solution so it doesn't know anything
about rails's rendering logic etc. I'm also fairly sure Jonas will say
that it's something that won't be implemented.

I think the key thing here is that rendering a template is a
controller level thing and Capybara is designed to be an acceptance
testing tool, hence you need to test results and not implementation
with it.

- Toni

On Sat, Sep 4, 2010 at 10:29 PM, David Chelimsky <dchelimsky at gmail.com> wrote:
>
> On Sep 4, 2010, at 2:26 PM, David Chelimsky wrote:
>
>>
>> On Sep 4, 2010, at 1:41 PM, Daniel Lidström wrote:
>>
>>> Hello,
>>>
>>> I am trying to run this integration test of my user controller within
>>> a rails 3 application:
>>>
>>> # spec/requests/users_spec.rb
>>>
>>> require 'spec_helper'
>>>
>>> describe "Users" do
>>>
>>>   describe "success" do
>>>
>>>     it "should make a new user" do
>>>       lambda do
>>>         visit signup_path
>>>         fill_in "Name", :with => "Example User"
>>>         fill_in "Email", :with => "user at example.com"
>>>         fill_in "Password", :with => "foobar"
>>>         fill_in "Confirmation", :with => "foobar"
>>>         click_button "Sign up"
>>>         page.should have_css("div.flash.success", :text =>
>>> "Welcome")
>>>         response.should render_template("user/show")
>>>       end.should change(User, :count).by(1)
>>>     end
>>>   end
>>> end
>>>
>>> The test fails when render_template is being called:
>>>
>>> daniel at ubuntu /home/daniel/programming/bowling (signing-up) $ rspec
>>> spec/requests/users_spec.rb -e "should make a new user"
>>> Run filtered using {:full_description=>/(?-mix:should make a new
>>> user)/}
>>> F
>>>
>>> Failures:
>>> 1) Users signup success should make a new user
>>>    Failure/Error: response.should render_template("user/show")
>>>    @request must be an ActionDispatch::Request
>>>    # ./spec/requests/users_spec.rb:34
>>>    # ./spec/requests/users_spec.rb:26
>>>
>>> Finished in 0.41306 seconds
>>> 1 example, 1 failure
>>>
>>> I am using rspec-rails (2.0.0.beta.20) with capybara (0.3.9). What am
>>> I missing here? For what it's worth I have verified the behaviour
>>> manually: registering a new user does indeed take me to the show page.
>>> Thanks in advance!
>>
>> The problem is that capybara doesn't assign anything to the @request variable after visit, so it doesn't support any of the built-in rails assertions that rely on @request, and render_template delegates to assert_template.
>
> For more context, this works fine with the rails built-in get, post, etc methods:
>
>  get things_path
>  response.should render_template("things/index")
>
> ... as well as webrat's visit method:
>
>  visit things_path
>  response.should render_template("things/index")
>
> That's why I say it's really a capybara issue. Make sense?
>
>> I'd file a bug with capybara on this one.
>>
>> Cheers,
>> David
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list