RoR,full_title有问题

时间:2015-01-21 21:44:05

标签: ruby-on-rails ruby rspec

我在Michael Hartl的RoR教程的第4章,并且在使用rspec和使用full_title帮助函数时遇到了一些麻烦。在本教程的第4.1部分中,我有如下的帮助程序代码。

应用程序/助手/ application_helper.rb

module ApplicationHelper

  # Returns the full title on a per-page basis.
  def full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      "#{base_title} | #{page_title}"
    end
  end
end

应用程序/视图/布局/ application.html.erb

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

规格/请求/ static_pages_spec.rb

require 'spec_helper'

describe "Static pages" do

  let(:base_title) {"Ruby on Rails Tutorial Sample App"}

  describe "Home page" do

    it "should have the content 'Sample App'" do
      visit '/static_pages/home'
      expect(page).to have_content('Sample App')
    end

    it "should have the base title" do
      visit '/static_pages/home'
      expect(page).to have_title("Ruby on Rails Tutorial Sample App")
    end

    it "should not have a custom page title" do
      visit '/static_pages/home'
      expect(page).not_to have_title('| Home')
    end
  end

end

应用程序/视图/ static_pages / home.html.erb

<h1>Sample App</h1>
    <p>this is the home page for the <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
    sample application.</p>

当我尝试进行测试时,我得到了这个:

gvyntyk@gvyntyk-r60:~/rails_projects/sample_app$ rspec spec/requests/static_pages_spec.rb
FFF

Failures:

  1) Static pages Home page should not have a custom page title
     Failure/Error: visit '/static_pages/home'
     ActionView::Template::Error:
       undefined local variable or method `base_title' for #<#<Class:0xb0ea7f8>:0xb0ea1cc>
     # ./app/helpers/application_helper.rb:6:in `full_title'
     # ./app/views/layouts/application.html.erb:4:in `_app_views_layouts_application_html_erb___36363065_93308240'
     # ./spec/requests/static_pages_spec.rb:20:in `block (3 levels) in <top (required)>'

  2) Static pages Home page should have the base title
     Failure/Error: visit '/static_pages/home'
     ActionView::Template::Error:
       undefined local variable or method `base_title' for #<#<Class:0xb0ea7f8>:0x961e58c>
     # ./app/helpers/application_helper.rb:6:in `full_title'
     # ./app/views/layouts/application.html.erb:4:in `_app_views_layouts_application_html_erb___36363065_93308240'
     # ./spec/requests/static_pages_spec.rb:15:in `block (3 levels) in <top (required)>'

  3) Static pages Home page should have the content 'Sample App'
     Failure/Error: visit '/static_pages/home'
     ActionView::Template::Error:
       undefined local variable or method `base_title' for #<#<Class:0xb0ea7f8>:0x9c13244>
     # ./app/helpers/application_helper.rb:6:in `full_title'
     # ./app/views/layouts/application.html.erb:4:in `_app_views_layouts_application_html_erb___36363065_93308240'
     # ./spec/requests/static_pages_spec.rb:10:in `block (3 levels) in <top (required)>'

Finished in 1.23 seconds
3 examples, 3 failures

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:19 # Static pages Home page should not have a custom page title
rspec ./spec/requests/static_pages_spec.rb:14 # Static pages Home page should have the base title
rspec ./spec/requests/static_pages_spec.rb:9 # Static pages Home page should have the content 'Sample App'

谁能告诉我这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

感觉您还没有发布测试运行的确切代码。我没有看到您发布代码的内容是如何在帮助程序中获得full_title,因为您在application.html.erb中只有yeild(:title)。什么都没有调用full_title。

看看书中的Michaels示例,您需要在标题标签中删除full_title(yield(:title)),删除您在那里发布的内容。