在Rails 3的Michael Hartls教程中,标题测试未通过请求规范

时间:2012-11-20 18:20:17

标签: ruby-on-rails-3 integration-testing capybara

我遵循Michael Hartl的Ruby On Rails 3教程,并使用Capybara进行集成规范。到目前为止的集成规范如下

require 'spec_helper'

describe "StaticPages" do
  describe "Home page" do
    it "should have the h1 'Sample App'" do
      visit '/static_pages/home'
      page.should have_selector('h1',:text => 'Sample App')
    end

    it "should have the title 'Home'" do
      visit '/static_pages/home'
      page.should have_selector('title',:text => "Ruby on Rails Tutorial Sample App | Home")
    end
  end

  describe "Help page" do
    it "should have the h1 'Help'" do
      visit '/static_pages/help'
      page.should have_selector('h1',:text => 'Help')
    end

    it "should have the title 'Help'" do
      visit '/static_pages/help'
      page.should have_selector('title',:text => "Ruby on Rails Tutorial Sample App | Help")
    end
  end

  describe "About page" do
    it "should have the h1 'About Us'" do
      visit '/static_pages/about'
      page.should have_selector('h1',:text => 'About Us')
    end

    it "should have the title 'About'" do
      visit '/static_pages/about'
      page.should have_selector('title',:text => "Ruby on Rails Tutorial Sample App | About Us")
    end
  end
end

当我运行这些测试时,我得到:

 1) StaticPages Home page should have the title 'Home'
     Failure/Error: page.should have_selector('title',:text => "Ruby on Rails Tutorial Sample App | Home")
       expected #has_selector?("title") to return true, got false
     # ./spec/requests/static_pages_spec.rb:12:in `block (3 levels) in <top (required)>'

  2) StaticPages Help page should have the title 'Help'
     Failure/Error: page.should have_selector('title',:text => "Ruby on Rails Tutorial Sample App | Help")
       expected #has_selector?("title") to return true, got false
     # ./spec/requests/static_pages_spec.rb:24:in `block (3 levels) in <top (required)>'

  3) StaticPages About page should have the title 'About'
     Failure/Error: page.should have_selector('title',:text => "Ruby on Rails Tutorial Sample App | About Us")
       expected #has_selector?("title") to return true, got false
     # ./spec/requests/static_pages_spec.rb:36:in `block (3 levels) in <top (required)>'

我希望标题测试可以获得帮助,页面也会失败,但我的home.html.erb如下:

<html>
<head>
  <title>Ruby on Rails Tutorial Sample App | Home</title>
</head>
<body>
<h1>Sample App</h1>
<p>
This is the homepage for the sample app
</p>
</body>
</html>

另外,我看到标题为'Ruby on Rails Tutorial Sample App | Home'on'/ static_pages / home'。什么导致家庭的标题测试失败?

2 个答案:

答案 0 :(得分:7)

Capybara 2.1改变了对查询标题元素的支持。因此,使用选择器以这种方式查询html doc头部中的title元素将失败“page.should have_selector('title',:text =&gt;'some text')

使用“page.should has_title('Some text')”来查询title元素应该有效。这是2.1 API实现查询title元素的新方法。

此外,如果您使用capybara 2x建议将位于'spec'文件夹(spec /文件夹)中名为'requests'的子文件夹中的文件移动到名为'features'(spec / features)的新文件夹中。

希望这会成功。

快乐的编码!!

答案 1 :(得分:4)

在宝石文件中,更改

gem 'capybara'

gem 'capybara', '1.1.2'

并运行'bundle update'。