RoutingError с тестом RSpec Controller на Scoped Route - PullRequest
3 голосов
/ 14 июля 2011

Итак, у меня есть маршрут, который выглядит так:

scope "4" do
  scope "public" do
    scope ":apikey" do
      resources :shops
    end
  end
end

И куча спецификаций контроллера, пример которых выглядит так:

describe ShopsController do

  describe "when responding to a GET" do

    context "#new" do
      it "should create a new instance of the shop class" do
        get :new
        @shop.should_not_be_nil
      end
    end

  end

end

На рейковых маршрутах, а также через веб-браузер этот контроллер / действие работает нормально. Тем не менее, RSpec бросает:

1) ShopsController when responding to a GET#new should create a new instance of the shop class
 Failure/Error: get :new
 ActionController::RoutingError:
   No route matches {:controller=>"shops", :action=>"new"}
 # ./spec/controllers/shops_controller_spec.rb:9:in `block (4 levels) in <top (required)>'

Когда я удаляю операторы scope из маршрута, тесты работают нормально. Есть ли способ «сообщить» RSpec об областях действия маршрута?

Заранее спасибо!

1 Ответ

6 голосов
/ 15 июля 2011

В соответствии с вашими маршрутами, :apikey является обязательным параметром, поэтому вам нужно добавить его в ваш get:

get :new, :apikey => "something"

Также вы должны изменить ожидание в следующей строке на это:

assigns[:shop].should_not be_nil

Используйте assigns для проверки переменных экземпляра контроллера и отделите should_not от сопоставителя пробелом, а не подчеркиванием.Этот последний бит требует некоторого привыкания.

...