【问题标题】:undefined local variable or method `root_path'未定义的局部变量或方法“root_path”
【发布时间】:2014-03-30 08:41:23
【问题描述】:

我的 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。我以前从来没有这样做过。谁能回答为什么会这样?

【问题讨论】:

  • @emaillenin 查看我刚刚进行的编辑。
  • 需要 rails_helper 而不是 spec_helper 为我做的

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


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

root :to => 'home#index'

【讨论】:

    【解决方案3】:

    您发现了您的问题,但我想让其他人知道他们可能会收到错误消息的另一个原因...

    NameError: undefined local variable or method `root_path'
    

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

    例如:

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

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

    【讨论】:

      【解决方案4】:

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

      但是,您需要确保它被正确声明 - 我之前有过 root_path 找不到,只是因为它位于 routes.rb 文件的末尾或其他东西

      显示整个routes.rb 文件会很有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        • 2018-04-19
        相关资源
        最近更新 更多