Title test failing for request specs in Michael Ha

2020-06-28 01:33发布

Im following the Ruby On Rails 3 tutorial by Michael Hartl and using Capybara for the integration specs. The integration specs so far are as follows

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

When i run these tests i get:

 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)>'

I expect the title test for help and about page to fail, but my home.html.erb is as follows

<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>

Also, i see the title 'Ruby on Rails Tutorial Sample App | Home' on '/static_pages/home'. Whats causing the title test for home to fail ?

2条回答
孤傲高冷的网名
2楼-- · 2020-06-28 01:44

In your gemfile, change

gem 'capybara'

into

gem 'capybara', '1.1.2'

and run 'bundle update'.

查看更多
老娘就宠你
3楼-- · 2020-06-28 01:55

Capybara 2.1 changed its support for querying the title element. So using have selector in to query for the title element in the head of the html doc in this fashion will fail "page.should have_selector('title', :text => 'Some text').

Use "page.should have_title('Some text')" to query the title element should work. That is new method that the 2.1 API implemented to query the title element.

Also if you using capybara 2x its suggested to move your files in the subfolder called 'requests' located in the 'spec' folder (spec/folder) into a new folder called 'features' (spec/features).

Hope this works out.

Happy coding!!

查看更多
登录 后发表回答