尽管定义了Method,但Rails中的NoMethodError

时间:2013-06-17 20:07:05

标签: ruby-on-rails railstutorial.org

我成功完成了Michael Hartl的Rails教程,现在我正在开展我的第一个更独立的Web开发项目。我已经在StackOverflow上阅读了其他NoMethodError Q& A,但到目前为止没有任何帮助。

我正在重复使用Hartl所涵盖的概念,专门定义一个名为full_title的客户帮助程序。我把以下代码放在/app/helpers/application_helper.rb

module ApplicationHelper
  def full_title(page_title)
    base_title = 'BaseTitle Text'
    if page_title.empty?
      base_title
    else
      "#{base_title} | #{page_title}"
    end
  end
end

然后在app/views/layouts/application.html.erb中,我提出了这段代码:

<!DOCTYPE html>
<html>
<head>
  <title><%= full_title(yield(:title)) %></title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

spec/requests/static_pages_spec.rb中进行这些测试后,我得到NoMethodError / undefined method

it "should have the right links on the layout" do
    visit root_path
    click_link "About"
    page.should have_selector 'title', text: full_title('About')
    click_link "Contact"
    page.should have_selector 'title', text: full_title('Contact')

我不太清楚为什么这里没有方法被识别出来。

Fyi我正在使用Capybara 1.1.2,以防万一。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:2)

也许您应该尝试在规范中包含您的帮助程序模块。

include ApplicationHelper

或者,如果您使用 RSpec ,则可以包含以下模块:

RSpec.configure do |config|
  # ...
  config.include ApplicationHelper
end