[rspec-users] Un-recognised routes that do exist, using namespaces & subdomain checking

DEfusion david.spurr at gmail.com
Tue Nov 10 17:29:14 EST 2009

Using RSpec 1.2.9 and Rails 2.3.4.

RSpec is not matching some of my routes during controller testing when
I have subdomain checking (courtesy of subdomain-fu) on namespaces.
These routes appear in the rake routes output, and work fine via HTTP
requests .

The really annoying thing is it's working fine for routes that aren't
at the root of the namespace.

E.g.  say I have

map.namespace :foo, :path_prefix => '', :conditions => { :subdomain =>
'foo' } do |foo|

    foo.bars, :controller => 'bars', :only => [:show] do |bar|
        bar.resources some_things ....

    foo.resources :monkeys

My specs for bars/some_things all resolve the routes fine (e.g. doing
get :index etc.)

Any spec that tries to hit monkeys/ give me a no route matches even
though these routes exist, e.g. doing get :index would result in:

    No route matches {:controller=>"foo/monkeys", :action=>"index"}

I've tried setting both @request.host and request.host to
foo.test.host but that doesn't make a blind bit of difference.

Maybe RSpec is doing something different with the request, as if I
monkey patch the routing with the following I never get the dumps when
using RSpec even though both these are called pretty early on in route

module Foo

  module RouteSetExtensions
    def self.included(base)
      base.alias_method_chain :extract_request_environment, :debug
      base.alias_method_chain :recognize_path, :debug

    def recognize_path_with_debug(path, environment={})
      puts path
      puts environment.to_yaml
      recognize_path_without_debug(path, environment)

    def extract_request_environment_with_debug(request)
      env = extract_request_environment_without_debug(request)
      puts env.to_yaml


ActionController::Routing::RouteSet.send :include,

So as you can probably tell, I'm out of ideas so I wondered if anyone
had any thoughts.

More information about the rspec-users mailing list