web-dev-qa-db-ja.com

カピバラ:ページのタイトルをテストする方法は?

Rails 3 Steak、Capybara、およびRSpecを使用するアプリケーションでは、ページのタイトルをどのようにテストしますか?

68
Nerian

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

これはRails 3.1.10、Capybara 2.0.2およびRspec 2.12で動作し、部分的なコンテンツの一致を許可します。

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

title要素を検索して、必要なテキストが含まれていることを確認できる必要があります。

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

これを仕様ヘルパーに追加しました。

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

RspecとCapybara 2.1を使用してページのタイトルをテストするには、次を使用できます。

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

    別のオプションは

  2. expect(page).to have_css 'title', text: 'Title text', visible: false
    Capybara 2.1以降のデフォルトはCapybara.ignore_hidden_elements = true、およびタイトル要素は非表示であるため、オプションvisible: false検索で非表示のページ要素を含める場合。

2
Aristotelis_Ch

各ページのタイトルのテストは、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
2
CharlesJHardy

subjectpageに設定し、ページの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
0
Starkers