Rails教程第3章Rspec测试失败

时间:2014-01-16 23:15:20

标签: ruby-on-rails

所以我一直在尝试跟随rails教程,但我一直坚持让标题略显动态。一旦我到达this part并运行

$ bundle exec rspec spec/requests/static_pages_spec.rb 

我收到以下错误

Failures:

  1) Static pages Help page should have the title 'Help'
     Failure/Error: expect(page).to have_title("Ruby on Rails Tutorial Sample App | Help")
       expected #has_title?("Ruby on Rails Tutorial Sample App | Help") to return true, got false
     # ./spec/requests/static_pages_spec.rb:27:in `block (3 levels) in <top (required)>'

  2) Static pages Home page should have the title 'Home'
     Failure/Error: expect(page).to have_title("Ruby on Rails Tutorial Sample App | Home")
       expected #has_title?("Ruby on Rails Tutorial Sample App | Home") to return true, got false
     # ./spec/requests/static_pages_spec.rb:14:in `block (3 levels) in <top (required)>'

  3) Static pages About page should have the title 'About Us'
     Failure/Error: expect(page).to have_title("Ruby on Rails Tutorial Sample App | About Us")
       expected #has_title?("Ruby on Rails Tutorial Sample App | About Us") to return true, got false
     # ./spec/requests/static_pages_spec.rb:40:in `block (3 levels) in <top (required)>'

Finished in 0.1826 seconds
6 examples, 3 failures

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:25 # Static pages Help page should have the title 'Help'
rspec ./spec/requests/static_pages_spec.rb:12 # Static pages Home page should have the title 'Home'
rspec ./spec/requests/static_pages_spec.rb:38 # Static pages About page should have the title 'About Us'

这就是我的“家庭”,“帮助”和“关于”视图。

主页

<% provide(:title, 'Home') %>
<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>

帮助

<% provide(:title, 'Help') %>
<h1>Help</h1>
<p>
  Get help on the Ruby on Rails Tutorial at the
  <a href="http://railstutorial.org/help">Rails Tutorial help page</a>.
  To get help on this sample app, see the
  <a href="http://railstutorial.org/book">Rails Tutorial book</a>.
</p>

关于

<%= provide(:title, 'About Us') %>
<h1>About Us</h1>
<p>
  The <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
  is a project to make a book and screencasts to teach web development
  with <a href="http://rubyonrails.org/">Ruby on Rails</a>. This
  is the sample application for the tutorial.
</p>

这是我的应用程序视图

<!DOCTYPE html>
<html>
<head>
  <title>Ruby on Rails Tutorial Sample App | <%= 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>

我的静态页面规范

require 'spec_helper'

describe "Static pages" do

  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 title 'Home'" do
      visit '/static_pages/home'
      expect(page).to have_title("Ruby on Rails Tutorial Sample App | Home")
    end
  end

  describe "Help page" do

    it "should have the content 'Help'" do
      visit '/static_pages/help'
      expect(page).to have_content('Help')
    end

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

  describe "About page" do

    it "should have the content 'About Us'" do
      visit '/static_pages/about'
      expect(page).to have_content('About Us')
    end

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

最后是我的gemfile

source 'https://rubygems.org'
ruby '2.1.0'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '4.0.2'

group :development, :test do
  gem 'sqlite3', '1.3.8'
  gem 'rspec-rails', '2.13.1'
end

group :test do
  gem 'selenium-webdriver', '2.35.1'
  gem 'capybara', '2.1.0'
end

gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end

4 个答案:

答案 0 :(得分:1)

如下所示更改您的视图(在第一行提供之前请注意=)。为所有三个观点做同样的事情

主页

<%= provide(:title, 'Home') %>
<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>

答案 1 :(得分:0)

您是否尝试过手动访问每个页面并亲自检查标题?

我把你提供的所有东西都粘贴到了一个项目中(我不久前做了教程,所以我已经设置了一个static_pages控制器)并且所有这些测试都通过了。我会说你可能混淆了你的视图的文件名,或路由文件中的名字,但是内容测试正在传递,所以不可能。我猜你的一个文件可能是由编辑器以错误的编码保存的,或者其他类似的东西。另外,在运行测试之前,请检查您是否已保存所有文件。

另请注意,=不需要<% provide ...,因此您可能应该将其从您的视图中删除。

答案 2 :(得分:0)

我想您可能忘记将“联系”页面添加到routes.rb文件中,如下所示:

SampleApp::Application.routes.draw do
  get "static_pages/home"
  get "static_pages/help"
  get "static_pages/about"
  get "static_pages/contact"

答案 3 :(得分:0)

试试这个:

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 title 'Home'" do
      visit '/static_pages/home'
      #expect(page).to have_title("#{base_title} | Home")
      page.should have_title("#{base_title} | Home")
    end
  end

  describe "Help page" do

    it "should have the content 'Help'" do
      visit '/static_pages/help'
      expect(page).to have_content('Help')
    end

    it "should have the title 'Help'" do
      visit '/static_pages/help'
      #expect(page).to have_title("#{base_title} | Help")
      page.should have_title("#{base_title} | Help")
    end
  end

  describe "About page" do

    it "should have the content 'About Us'" do
      visit '/static_pages/about'
      expect(page).to have_content('About Us')
    end

    it "should have the title 'About Us'" do
      visit '/static_pages/about'
      page.should have_title("#{base_title} | About Us")
    end
  end

  describe "Contact page" do

    it "should have the content 'Contact'" do
      visit '/static_pages/contact'
      expect(page).to have_content('Contact')
    end

    it "should have the title 'Contact'" do
      visit '/static_pages/contact'
   #   expect(page).to have_title("#{base_title} | Contact")
      page.should have_title("#{base_title} | Contact")
    end
  end
end

application.html.erb

 <!DOCTYPE html>
  <html>
   <head>
    <title>Ruby on Rails Tutorial Sample App | <%= 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>

gem'capybara','2.1.0'

标题中有空格