Метод get в тестах контроллера Rails не выдает совпадений маршрута для контроллера, ограниченного модулем

Кажется, я не могу обойти метод get в своих спецификациях контроллера rspec для маршрутов с ограниченной областью действия.

Я определяю маршруты для своих контроллеров «посетителей», чтобы они находились в пространстве имен модуля «посетитель», но находились в корне маршрутизации. Таким образом, mysite.com/foo переходит к Visitor::FooController.

config/routes.rb

scope :module => 'visitor' do
  resources :inquiries
end

спецификация/контроллеры/посетитель/inquiries_controller_spec.rb

require 'spec_helper'

describe Visitor::InquiriesController do
  describe 'GET new' do
    it 'should render template visitor/inquiries/new' do
      get :new
    end
  end
end

приложение/контроллеры/посетитель/inquiries_controller.rb

class Visitor::InquiriesController < Visitor::BaseController
  def new
  end
end

Когда я запускаю спецификацию, я получаю следующую ошибку.

No route matches {:controller=>"visitor/inquiries", :action=>"new"}

Я попытался добавить некоторые дополнительные параметры для получения (например, :url => 'запросы/новый', :controller => 'запросы'), но я не могу обойти эту проблему. Нажатие «запросы/новые» в моем браузере работает нормально и показывает, что мои маршруты работают должным образом.

Я новичок в rspec, поэтому здесь может быть какая-то фундаментальная проблема, которую я не понимаю. В противном случае я ищу способ обойти эти проблемы, чтобы я мог протестировать эти контроллеры «посетителей». Любая помощь приветствуется!


person Mitch    schedule 31.12.2010    source источник
comment
Это изолировано? Другие маршруты работают?   -  person stef    schedule 31.12.2010
comment
Я только что попробовал спецификацию контроллера для контроллера «admin», и get: new работал нормально. Разница с этими контроллерами «admin» заключается в том, что маршруты ограничены «admin» (например, «admin/accounts»).   -  person Mitch    schedule 31.12.2010
comment
Может быть, Visitor::InquiriesController должен происходить от ApplicationController?   -  person zetetic    schedule 31.12.2010
comment
Возможно, я должен был удалить наследование от Visitor::BaseController для вопроса, поскольку это не должно иметь никакого эффекта. Просто чтобы убедиться, что я только что попытался наследовать напрямую от ApplicationController и получил то же сообщение об ошибке. Также контроллер администратора, который я тестировал для stef, использует аналогичную схему наследования (наследуется от Admin::BaseController).   -  person Mitch    schedule 01.01.2011
comment
Я продублировал эту конфигурацию и не увидел ошибки. Вы говорите, что это работает вне RSpec, что вызывает недоумение. Делает ли Visitor::BaseController что-то особенное?   -  person zetetic    schedule 03.01.2011


Ответы (2)


Проблема была устранена, когда я перезагрузил компьютер на следующий день. Похоже, возникла какая-то проблема со Spork, которая вызывала проблему. Я не уверен, что этот вопрос можно удалить, но, вероятно, он не представляет большой ценности для Stackoverflow.

person Mitch    schedule 24.02.2011

Посмотрите в config/routes.rb, раскомментируйте следующую строку: match ':controller(/:action(/:id(.:format)))' Теперь все должно работать

person bob4ever    schedule 07.01.2011
comment
Не делай этого. Он предоставляет все действия контроллера для запросов GET, на которые не распространяется защита CSRF. - person George Claghorn; 14.03.2014