水豚:如何testing页面的标题?

在使用Steak,Capybara和RSpec的Rails 3应用程序中,如何testing页面的标题?

由于水豚2.1.0版在会话中有处理标题的方法。 你有

page.title page.has_title? "my title" page.has_no_title? "my not found title" 

所以你可以testing标题,如:

 expect(page).to have_title "my_title" 

根据github.com/jnicklas/capybara/issues/863以下也使用水豚2.0

 expect(first('title').native.text).to eq "my title" 

这在Rails 3.1.10,Capybara 2.0.2和Rspec 2.12下工作,并允许匹配部分内容:

 find('title').native.text.should have_content("Status of your account::") 

你应该能够searchtitle元素,以确保它包含你想要的文本:

 page.should have_xpath("//title", :text => "My Title") 

使用RSpec可以更简单地testing每个页面的标题。

 require 'spec_helper' describe PagesController do render_views describe "GET 'home'" do before(:each) do get 'home' @base_title = "Ruby on Rails" end it "should have the correct title " do response.should have_selector("title", :content => @base_title + " | Home") end end end 

我把这个添加到我的规范帮手:

 class Capybara::Session def must_have_title(title="") find('title').native.text.must_have_content(title) end end 

那我可以用:

 it 'should have the right title' do page.must_have_title('Expected Title') end 

为了使用Rspec和Capybara 2.1来testing页面的标题,你可以使用

  1. expect(page).to have_title 'Title text'

    另一个select是

  2. expect(page).to have_css 'title', text: 'Title text', visible: false
    由于Capybara 2.1的默认值是Capybara.ignore_hidden_elements = true ,而且由于标题元素是不可见的,所以您需要选项visible: false以使search包含不可见的页面元素。

你只需要设置subject page ,然后写一个页面的title方法的期望:

 subject{ page } its(:title){ should eq 'welcome to my website!' } 

在上下文中:

 require 'spec_helper' describe 'static welcome pages' do subject { page } describe 'visit /welcome' do before { visit '/welcome' } its(:title){ should eq 'welcome to my website!'} end end 

it { should have_selector "title", text: full_title("Your title here") }