Rails 3 Steak、Capybara、およびRSpecを使用するアプリケーションでは、ページのタイトルをどのようにテストしますか?
Capybaraのバージョン2.1.0以降、セッションにタイトルを処理するメソッドがあります。あなたが持っている
page.title
page.has_title? "my title"
page.has_no_title? "my not found title"
したがって、次のようにタイトルをテストできます。
expect(page).to have_title "my_title"
github.com/jnicklas/capybara/issues/86 によると、以下はcapybaraでも機能しています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::")
title
要素を検索して、必要なテキストが含まれていることを確認できる必要があります。
page.should have_xpath("//title", :text => "My Title")
これを仕様ヘルパーに追加しました。
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を使用してページのタイトルをテストするには、次を使用できます。
expect(page).to have_title 'Title text'
別のオプションは
expect(page).to have_css 'title', text: 'Title text', visible: false
Capybara 2.1以降のデフォルトはCapybara.ignore_hidden_elements = true
、およびタイトル要素は非表示であるため、オプションvisible: false
検索で非表示のページ要素を含める場合。
各ページのタイトルのテストは、RSpecを使用してはるかに簡単な方法で実行できます。
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
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