[rspec-users] render_template failure

David Chelimsky dchelimsky at gmail.com
Sat Sep 4 16:18:16 EDT 2010


On Sep 4, 2010, at 3:15 PM, Toni Tuominen wrote:

> 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.

Please post at the bottom or in-line (I move your post from the top).

> 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.

Makes sense. So if we decided this was a bug, which lib should own this?

> 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.

+1

Cheers,
David


More information about the rspec-users mailing list