#ruby-on-rails #ruby-on-rails-3 #rspec2
#ruby-on-rails #ruby-on-rails-3 #rspec2
Вопрос:
В моем 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 находится в процессе переноса с rails 2.3.11 на rails 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
Но это не имело никакого эффекта.
У кого-нибудь есть какие-нибудь советы?
Ответ №1:
попробуйте добавить эту строку в свои маршруты
resources :home, :controller => :home
Комментарии:
1. Привет @fl00r, спасибо за ваш совет. Для меня это ничего не меняет. На самом деле у меня есть
get 'home/index'
внутри маршрутов (для меня этого достаточно) (я соответствующим образом отредактировал свой вопрос, чтобы сделать это более понятным). Как я уже сказал, приложение работает, просто во время выполненияrake spec
происходит сбой.
Ответ №2:
Я думаю, вам, возможно, придется быть более конкретным:
get 'home/index' => 'home#index'
Комментарии:
1. Из документации: edgeguides.rubyonrails.org/routing.html#http-verb-constraints У меня такое чувство, что это должно быть связано с rspec, поскольку само приложение работает.
2. Я не сомневаюсь, что это работает. Мне просто интересно, может ли у Rspec быть какая-то проблема с сокращением… Но на самом деле я просто предполагаю.
Ответ №3:
Я нашел это! Это заняло у меня некоторое время, в конце концов я изменил лог-файлы, которые видят, что происходит по-другому.
По-видимому, у меня есть файл спецификации on, где мы пытаемся протестировать базовый класс. Внутри этой спецификации мы определяем новый контроллер, производный от этого базового класса, с фиктивным методом индекса.
А также нам нужны маршруты, поэтому внутри этой спецификации должен был быть найден следующий код:
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
и почему-то эта спецификация всегда запускалась первой. Я думаю, это эффективно очищает всю конфигурацию маршрутизации.
Не уверен, вызвано ли это изменение rails3 или rspec2, в любом случае большинство моих тестов теперь работают, просто нужно исправить этот тест сейчас.