Forum: RSpec Need help using URL helpers in controller tests

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Christopher B. (Guest)
on 2008-10-09 23:26
(Received via mailing list)
I have a controller test, where I want to do a GET on a page.  Our URL's
are
complex, and need to be correct (duh, but we allow some slop, but that
causes a redirect which I want to avoid).  Anyway, in my controller test
I
do a get to the URL that is produced by a helper method which calls a
named
route URL helper.  This is not working, and I'm wondering why/what I'm
messing up.  Here's the line in the spec code that starts things off
(@widget is a real ActiveRecord object):
      get @controller.widget_path_for_seo(@widget)

The widget_path_for_seo method is defined in our ApplicationController.
It
digs some info out of the widget instance that then get passed to the
named
route URL helper method, so it looks like this:

  def widget_path_for_seo(widget)
    location = seo_name_for_url widget.location.name
    building =
seo_name_for_url(building_name_for_seo_url(widget.building),
true) + "-widgets"
    widget_id = seo_name_for_url(widget.name) + "-" + widget.id.to_s

    seo_widget_path(:location => location, : building => building, :id
=> widget_id)
  end

It's the "seo_widget_path" named route helper method that is failing.
I've
checked that all values going into it are valid, but the error I get is
in
ActionController::Base.url_for, where it's looking at the options hash
of
values that are passed in, and doing this:

            @url.rewrite(rewrite_options(options))

It compalins that @url is nil.  I'm wondering if this is due to being
run
under the test environment or what I'm missing/not realizing, etc.
What's
strange is that some of the restful resource route url helpers work
fine.
 Can anyone clue me in?
Matt W. (Guest)
on 2008-10-10 12:05
(Received via mailing list)
On 9 Oct 2008, at 20:24, Christopher B. wrote:

>
>     widget_id = seo_name_for_url(widget.name) + "-" + widget.id.to_s
>
> http://cobaltedge.com
Quick thought - it doesn't look like you have 'spun' up the routes
when you test this method. If you haven't already made a get/post
request through the rails integration session infrastructure the named
routes don't get loaded, and that can be quite confusing. I'm not sure
if that could be the cause of your issue but I thought it was worth
mentioning.
Christopher B. (Guest)
on 2008-10-10 18:37
(Received via mailing list)
I've moved on from this with a bit different approach.  But, I also
found
that the "get" (or whichever http method used) call expects the first
parameter to be an action, so passing in a string that is a path or URL
doesn't work for that.
David C. (Guest)
on 2008-10-10 19:41
(Received via mailing list)
On Fri, Oct 10, 2008 at 9:37 AM, Christopher B.
<removed_email_address@domain.invalid> wrote:
> I've moved on from this with a bit different approach.  But, I also found
> that the "get" (or whichever http method used) call expects the first
> parameter to be an action, so passing in a string that is a path or URL
> doesn't work for that.

That is correct. rspec delegates the get, post, put, delete, etc
methods off to rails. In the case of controller examples, they work
like rails functional tests. In the case of stories/features, they
work like rails integration tests (which work differently).
This topic is locked and can not be replied to.