have_contentマッチャでコンテンツ内容を確認する
ページ内容をhave_contentマッチャで確認します。 (2014/10/11)

「」第2回の今回はページ内容をhave_contentマッチャで確認します。
ちなみにここでいうコンテンツはページ内のテキストとなります。
have_content
マッチャでのコンテンツ内容確認を行うには
expect(page).to have_content 'Rails4でCapybara入門'
のようにマッチャを使います。
scenario
ブロックで書くと
scenario do
visit '/'
expect(page).to have_content 'Rails4でCapybara入門'
end
となります。
前回のhave_title
マッチャも合わせて使うと
scenario do
visit '/'
expect(page).to have_title '江の島エンジニアBlog'
expect(page).to have_content 'Rails4でCapybara入門'
end
となります。
テストを分ける
上記ではscenario
ブロックの中でhave_title
マッチャとhave_content
マッチャを使いましたが、これだとhave_title
が失敗した時にhave_content
が成功なのか失敗なのかがわかりません。
そういう場合はテストケースを分けて
scenario do
visit '/'
expect(page).to have_title '江の島エンジニアBlog'
end
scenario do
visit '/'
expect(page).to have_content 'Rails4でCapybara入門'
end
とすると良いです。
beforeを使う
テストケースを分けた場合、visit
を2回実行していてDRYではないのでbefore
ブロックを使ってvisit
メソッドをまとめます。
before { visit '/' }
scenario do
expect(page).to have_title '江の島エンジニアBlog'
end
scenario do
expect(page).to have_content 'Rails4でCapybara入門'
end
これでどちらのscenario
も実行前にbefore
ブロック内のvisit
メソッドが実行されます。
itを使う
各scenario
ブロックの中が1行なので、こういう時はit
とsubject
とshould
を使ってすっきり書けます。
before { visit '/' }
subject { page }
it { should have_title '江の島エンジニアBlog' }
it { should have_content 'Rails4でCapybara入門' }
テストを実行する
今回作成したテストを実行すると
view top page
should have title "江の島エンジニアBlog"
should have content "Rails4でCapybara入門"
となりちゃんと両方ともテストに成功しました。
次回はhave_linkマッチャを使ったリンクの確認を行います。