undefined局部变量或方法`root_path'

use*_*436 20 rspec ruby-on-rails ruby-on-rails-4

我在/ 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
Run Code Online (Sandbox Code Playgroud)

当我跑它时,我得到了

undefined local variable or method `root_path'
Run Code Online (Sandbox Code Playgroud)

这没有任何意义.当我按照rails教程时,类似的设置工作得很好.有人可以帮忙吗?

编辑:

我的路线包括

root "static#home"
Run Code Online (Sandbox Code Playgroud)

编辑2:

重新打开此主题.将我的根声明移到顶部并没有解决它.

编辑3:

什么工作包括我的rspec配置中的url_helpers.我以前从来没有这样做过.任何人都可以回答为什么这有效

Ger*_*osi 37

默认情况下,命名路由在规范中不可用.将以下代码添加到spec_helper.rb:

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
end
Run Code Online (Sandbox Code Playgroud)


Len*_*ran 13

在routes.rb中,查看是否已定义root.像这样的东西:

root :to => 'home#index'
Run Code Online (Sandbox Code Playgroud)


use*_*833 7

你弄清楚了你的问题,但我想让别人知道他们可能收到错误信息的另一个原因......

NameError: undefined local variable or method `root_path'
Run Code Online (Sandbox Code Playgroud)

...是因为他们重命名了"根"路线:

例如:

root to: 'pages#landing', as: :home
Run Code Online (Sandbox Code Playgroud)

这将在您的应用程序中创建home_pathhome_url命名为帮助程序,root_path而且root_url将是未定义的.