undefined局部变量或方法`root_path'

时间:2014-03-30 08:41:23

标签: ruby-on-rails ruby-on-rails-4 rspec

我的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'

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

修改

我的路线包括

root "static#home"

编辑2:

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

编辑3:

在我的rspec配置中包含url_helpers的功能是什么。我以前从来没有这样做过。任何人都可以回答为什么这有用吗?

4 个答案:

答案 0 :(得分:36)

默认情况下,指定的路线在规格中不可用。将以下代码添加到spec_helper.rb

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

答案 1 :(得分:12)

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

root :to => 'home#index'

答案 2 :(得分:7)

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

NameError: undefined local variable or method `root_path'

...是因为他们renamed the "root" route

例如:

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

这会在您的应用中创建home_pathhome_url作为命名助手,而root_pathroot_url未定义

答案 3 :(得分:1)

正如@emaillenin所述,您需要在root to: "controller#action"文件中加入routes.rb

但是,您需要确保正确声明这一点 - 我找不到root_path之前已经找到它,只是因为它位于routes.rb文件的末尾什么

显示整个routes.rb文件

会很有用