Ответ 1
Именованные маршруты по умолчанию недоступны в спецификациях. Добавьте следующий код в spec_helper.rb
:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
end
У меня есть следующий блок кода в моем файле rspec, расположенном в корне папки /spec.
require 'spec_helper'
describe "home" do
subject { page }
before(:each) { visit root_path }
describe "page" do
it { should have_title('My Page')}
end
end
Когда я запускаю его, я получаю
undefined local variable or method `root_path'
Это не имеет никакого смысла. Когда я следил за инструкциями по рельсам, подобная настройка работала отлично. Может ли кто-нибудь помочь?
EDIT:
Мои маршруты включают
root "static#home"
ИЗМЕНИТЬ 2:
Открытие этой темы. Перемещение моего корневого объявления в начало не исправляло его.
ИЗМЕНИТЬ 3:
Что работало, включая url_helpers в моей конфигурации rspec. Мне никогда не приходилось это делать раньше. может кто-нибудь ответить, почему это сработало?
Именованные маршруты по умолчанию недоступны в спецификациях. Добавьте следующий код в spec_helper.rb
:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
end
В ваших route.rb, посмотрите, если вы определили root
. Что-то вроде этого:
root :to => 'home#index'
Как упоминалось в @emaillenin
, вам нужно включить root to: "controller#action"
в ваш routes.rb
файл
Однако вам нужно убедиться, что это объявлено правильно - у меня было это до того, как root_path
не найден, только потому, что он находится в конце файла routes.rb
или что-то
Было бы полезно показать весь ваш routes.rb
файл
Вы выяснили свою проблему, хотя я хочу, чтобы другие знали, что еще одна причина, по которой они могут получить сообщение об ошибке...
NameError: undefined local variable or method `root_path'
... заключается в том, что они переименовали "корневой" маршрут:
Например:
root to: 'pages#landing', as: :home
Это создаст home_path
и home_url
в качестве именных помощников в вашем приложении, тогда как root_path
и root_url
будет undefined.