1

我无法弄清楚是什么导致了失败!这是我在stackoverflow上的第一篇文章,所以如果我遗漏了一些需要的信息,我提前道歉......好吧,这是失败......

Failures:

1) Static pages Help page 
 Failure/Error: it { should have_selector('title', text: full_title('Help')) }
   expected css "title" with text "Ruby on Rails Tutorial Sample App | Help" to return something
 # ./spec/requests/static_pages_spec.rb:19:in `block (3 levels) in <top (required)>'

2) Static pages About page 
 Failure/Error: it { should have_selector('title', text: full_title('About Us')) }
   expected css "title" with text "Ruby on Rails Tutorial Sample App | About Us" to return something
 # ./spec/requests/static_pages_spec.rb:26:in `block (3 levels) in <top (required)>'

3) Static pages Contact page 
 Failure/Error: it { should have_selector('title', text: full_title('Contact')) }
   expected css "title" with text "Ruby on Rails Tutorial Sample App | Contact" to return something
 # ./spec/requests/static_pages_spec.rb:33:in `block (3 levels) in <top (required)>'

Finished in 0.35756 seconds
9 examples, 3 failures

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:19 # Static pages Help page 
rspec ./spec/requests/static_pages_spec.rb:26 # Static pages About page 
rspec ./spec/requests/static_pages_spec.rb:33 # Static pages Contact page 

这是我的路线.rb

SampleApp::Application.routes.draw do
root to: 'static_pages#home'

match '/help',    to: 'static_pages#help'
match '/about',   to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'

end

static_pages_spec.rb

require 'spec_helper'

describe "Static pages" do

subject { page }

describe "Home page" do
before { visit root_path }

it { should have_selector('h1',    text: 'Sample App') }
it { should have_selector('title', text: full_title('')) }
it { should_not have_selector 'title', text: '| Home' }
end

describe "Help page" do
before { visit help_path }

it { should have_selector('h1',    text: 'Help') }
it { should have_selector('title', text: full_title('Help')) }
end

describe "About page" do
before { visit about_path }

it { should have_selector('h1',    text: 'About') }
it { should have_selector('title', text: full_title('About Us')) }
end

describe "Contact page" do
before { visit contact_path }

it { should have_selector('h1',    text: 'Contact') }
it { should have_selector('title', text: full_title('Contact')) }
end
end

联系人.html.erb

 <h1>Contact</h1>
 <p>
 Contact Ruby on Rails Tutorial about the sample app at the
 <a href="http://railstutorial.org/contact">contact page</a>.
 </p>

应用程序.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 %>
<%= render 'layouts/shim' %>    
</head>
<body>
<%= render 'layouts/header' %>
<div class="container">
  <%= yield %>
  <%= render 'layouts/footer' %>
</div>
</body>
</html>
4

1 回答 1

0

您的测试失败,因为您的应用程序布局正在产生标题,但您没有在任何地方设置标题。当您yield :something在视图中看到时,例如标题,这意味着该视图将呈现它所知道的“:something”的任何内容。在您的情况下,标题是通过以下方式产生的:

<title><%= full_title(yield(:title)) %></title>

为了告诉 Rails 你想要“标题”产生什么内容,你需要在你的视图中设置它:

content_for(:title) { 'My Title'}

在每个视图中都必须重复这一点可能很乏味,所以很多人会为标题创建一个助手:

module ApplicationHelper
  def title(page_title = '')
    content_for(:title) { page_title }
  end
end

然后在您看来,您可以这样做:

<%= title 'My Title' %>

查看Railscast #30了解有关此技术的更多信息

于 2012-06-10T12:56:34.670 回答