Rspec测试应该通过但是失败

我从迈克尔哈特书中得到了这个测试:

require 'spec_helper' describe "Static pages" do let(:base_title) { "Ruby on Rails Tutorial Sample App" } 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 => "#{base_title} | Home") end end end 

并且观点:

  

Sample App

This is the home page for the Ruby on Rails Tutorial sample application.

当我运行测试时,它说:

 .... Finished in 1.91 seconds 4 examples, 0 failures Randomized with seed 42247 .F... Failures: 1) Static pages Home page should have the title 'Home' Failure/Error: page.should have_selector('title', :text => "#{base_title} | Home") expected #has_selector?("title", {:text=>"Ruby on Rails Tutorial Sample App | Home"}) to return true, got false # ./spec/requests/static_pages_spec.rb:16:in `block (3 levels) in ' Finished in 1.91 seconds 5 examples, 1 failure Failed examples: rspec ./spec/requests/static_pages_spec.rb:14 # Static pages Home page should have the title 'Home' Randomized with seed 17491 

但它应该通过,因为当我在浏览器中查看页面时,标题是:Ruby on Rails Tutorial Sample App | 示例应用程序,这是正确的!

确保你在Gemfile中使用capybara 1.1.2。 从2.0 capybara开始不适用于标题测试(https://github.com/jnicklas/capybara/issues/844)

 ... group :test do gem 'capybara', '1.1.2' end 

目前,你应该做@dimuch建议的事情,并确保你指定Michael Hartl在教程(1.1.2)中使用的相同Capybara版本。

如果您希望将来升级到Capybara 2.0并保留测试标题,请查看此StackOverflow答案 ,以获取创建RSpec匹配器的指南,该指南可以满足您的期望。

使用capubara 2.0你应该使用

 page.should have_title("The title") 

但是,如果你不添加,不能工作

  

到您的application.html

 page.title # => "The title" page.has_title?("The title") # => true page.should have_title("The title") 

我一直在使用以下内容,他们一直在发布绿色。 我删除了have_selector并使用了have_title。

it { should have_title( full_title('Sign up') ) }

– 和 –

it { should have_title(user.name) }

这是与水豚2.2.0。