rails3 и rspec2: ошибка маршрута не совпадает (пока он работает в приложении) - PullRequest
0 голосов
/ 07 апреля 2011

В моем routes.rb у меня есть следующее:

get 'home/index'
root :to => 'home#index'

Если я бегу rake routes | grep home, вы видите

home_index GET    /home/index(.:format)      {:action=>"index", :controller=>"home"}
root              /(.:format)                {:action=>"index", :controller=>"home"}

Итак, в моем application.html.haml есть ссылка на root_path, которая хорошо конвертируется в

{:controller => "home", :action => :index}

Но в каждой спецификации, которую я запускаю, я получаю сообщение об ошибке:

No route matches {:controller=>"home"}

Пока я запускаю приложение в разработке, все рендерится без каких-либо проблем и кликабельна правильно.

Кто-нибудь знает, что я сделал не так?

Я должен добавить, что приложение rails находится в процессе мигрировал с рельсов 2.3.11 на рельсы 3. Должно быть, я что-то упустил, но не вижу, что.

[РЕДАКТИРОВАТЬ: больше результатов]

Я пробовал больше вещей. Тест прекрасно работает в Rubymine, или если я использую командную строку и набираю

rspec spec/controllers/users_controller/*.spec.rb

Но они не работают, если я использую

rake spec

В чем разница? Я удалил файл lib/tasks/rspec.rake (который был сгенерирован для rspec1), и я вижу, что выполняется правильная команда:

bundle exec rspec 

Так что я немного растерялся.

[РЕДАКТИРОВАТЬ: больше испытаний]

при работе

rspec spec/controller/**/*_spec.rb

мои тесты не выполняются при работе

rspec spec/controller/accounts_controller/*_spec.rb

Вверху моих файлов у меня есть следующее:

describe AccountsController do

Я добавил тип явно:

describe AccountsController, :type => :controller do

Но это никак не отразилось.

У кого-нибудь есть советы?

Ответы [ 3 ]

0 голосов
/ 07 апреля 2011

Я думаю, что вы должны быть более конкретны:

get 'home/index' => 'home#index'
0 голосов
/ 08 апреля 2011

Я нашел это! Это заняло у меня какое-то время, в конце концов я разобрал лог-файлы, которые видят, что происходит по-другому.

По-видимому, у меня есть файл спецификаций, где мы пытаемся протестировать базовый класс. Внутри этой спецификации мы определяем новый контроллер, который выводит из этого базового класса, с использованием метода фиктивного индекса.

А также нам нужны маршруты, поэтому внутри этой спецификации должен быть найден следующий код:

ActionController::Routing::Routes.draw do |map|
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

и почему-то эта спецификация всегда запускалась первой. Это эффективно очищает всю конфигурацию маршрутизации, я думаю.

Не уверен, что это изменение вызвано rails3 или rspec2, в любом случае большинство моих тестов сейчас работают, просто нужно исправить это проверить сейчас.

0 голосов
/ 07 апреля 2011

попробуйте добавить эту строку в ваши маршруты

resources :home, :controller => :home
...