I have a request spec in a Rails engine. The view that is rendered calls a route and passes in a hash, i.e. projects_path(:scope => "user")
. A route like this will eventually call url_for
, but url_for
is defined in many places. When running the application or running a request spec in the main app (root level), the call chain ends up at ActionView::RoutingUrlFor#url_for
; when running a spec in the engine, however, the call chain ends up at ActionView::Helpers::UrlHelper#url_for
.
In Rails 4, the url_for
method defined in UrlHelper
no longer accepts hash arguments, so I'm left with this error
Failure/Error: visit projects_opportunity_intakes_path
ActionView::Template::Error:
arguments passed to url_for can't be handled. Please require routes or provide your own implementation
What I'm trying to figure out is why the heck it's falling back on ActionView::Helpers::UrlHelper
when I run a spec in my engine, but not in any other case. This is quite perplexing. One thing that stands out to me: when I put a breakpoint in my view and evaluate self.class
, I normally get something that inherits from ActionView::Base
, but when I run a spec from my engine, the class doesn't inherit from anything. I don't know if that's related, but it seems fishy.
Anyone experience this? Know a way around it? Could my modules be getting included in the wrong order? Is there something in spec_helper
or in the dummy app initialization that I can do to make sure that the right modules are being used?
I had the same issue when updating to Rails 4, and I discovered that the problem was a model containing the following line:
include Rails.application.routes.url_helpers
Try finding code in your application that includes url_helpers
somewhere. Removing that line should help solve the problem.