web-dev-qa-db-ja.com

未定義のローカル変数またはメソッド「root_path」

/ specフォルダーのルートにあるrspecファイルに次のコードブロックがあります。

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'

これは意味がありません。 Railsチュートリアルを実行したとき、同様の設定で問題なく動作しました。誰か助けてもらえますか?

編集:

私のルートには

root "static#home"

編集2:

このトピックを再開します。ルート宣言を先頭に移動しても修正されませんでした。

編集3:

うまくいったのは、rspec構成にurl_helpersを含めることでした。これまでにこれを行う必要はありませんでした。これがうまくいった理由を誰かが答えることができますか?

21
user3389436

名前付きルートは、デフォルトでは仕様で使用できません。次のコードをspec_helper.rbに追加します。

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
end
38
Gergo Erdosi

Routes.rbで、rootを定義しているかどうかを確認します。このようなもの:

root :to => 'home#index'
14

あなたはあなたの問題を理解しました、しかし私は彼らがエラーメッセージを受け取るかもしれない別の理由を他の人に知らせたいです...

NameError: undefined local variable or method `root_path'

...それらは 「ルート」ルートの名前を変更したためです

例えば:

root to: 'pages#landing', as: :home

これにより、home_pathおよびhome_urlがアプリケーションの名前付きヘルパーとして作成されますが、root_pathおよびroot_urlundefined

7
user664833

_@emaillenin_で述べたように、_root to: "controller#action"_ファイルに_routes.rb_を含める必要があります

ただし、これが正しく宣言されていることを確認する必要があります。_root_path_ファイルまたは何かの終わりにあるという理由だけで、_routes.rb_が見つからないことを以前に知っていました。

_routes.rb_ファイル全体を表示すると便利です

1
Richard Peck