※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
テストをより正確にする
前回、have_content
だけでは不十分にな可能性があるとわかった
テストが「偶然」通ってしまったなんてことにならないよう、より正確にしていく
have_content
をhave_css
に書き換える
it '記事一覧が表示される' do
visit root_path
articles.each do |article|
expect(page).to have_css(article.title)
end
end
have_css 検証できること
- cssが存在しているか
- cssのクラスが持っているタグのテキストが
article.title
と一致するか
例)commons/_article.html.hamlを見てみる

「card_title
」クラスのテキストが「article.title
」ならばok
it '記事一覧が表示される' do
visit root_path
articles.each do |article|
expect(page).to have_css('.card_title', text: article.title)
end
end
'.card_title'
に対して、text
がarticle.title
かどうかテストする
bundle exec rspec spec/system/article_spec.rb
成功!

ページ内に指定した文字があるかどうか(have_content
)より、
指定したクラスに指定した文字があるか(heve_css
)のほうが正確なテストができる
記事をクリックしたら、記事詳細が表示されるかを検証する
click_on
は、文字列を指定すると、合致する文字列のaタグをクリックしてくれる
it '記事詳細を表示できる' do
visit root_path
article = articles.first
click_on article.title
end
- ブラウザのトップ画面を立ち上げる(
visit
) articles.first
をarticle
と定義する- 立ち上げたトップ画面内で
article.title
を探し、クリックする(click_on
)
urlを指定しなくていいので便利だけど、aタグ以外には使えないので注意
articles/show.html.hamlを見てみる

「article_title
」クラスのテキストが「article_title
」ならok
it '記事詳細を表示できる' do
visit root_path
article = articles.first
click_on article.title
expect(page).to have_css('.article_title', text: article.title)
expect(page).to have_css('.article_content', text: article.content.to_plain_text)
end
title
だけじゃなくてcontent
も必要なので書き足しておく
content
はインスタンスで取得してしまうので、.to_plain_text
を忘れないこと
require 'rails_helper'
RSpec.describe 'Article',type: :system do
let!(:user) { create(:user) }
let!(:articles) { create_list(:article, 3, user: user) }
it '記事一覧が表示される' do
visit root_path
articles.each do |article|
expect(page).to have_css('.card_title', text: article.title)
end
end
it '記事詳細を表示できる' do
visit root_path
article = articles.first
click_on article.title
expect(page).to have_css('.article_title', text: article.title)
expect(page).to have_css('.article_content', text: article.content.to_plain_text)
end
end
↓ターミナル画面で実行してみる
bundle exec rspec spec/system/article_spec.rb
前述したテストと合わせて、ふたつとも成功!

講座でおすすめされていたチートシート
Capybaraはできることがたくさんある
#DAY15