はじめに
こちらは前回の続きとなります。
【RSpec】Ruby on Rails チュートリアル「第3章」のテストを RSpec で書いてみた
https://qiita.com/t-nagaoka/items/27b51ef1610c4c336a80
対象者
- Ruby on Rails チュートリアルのテストを Rspec で実施予定、または実施してみたい人
- Ruby on Rails チュートリアル「第4章」のテストを Rspec で書きたいけど、書き方が分からない人
テストコード
実際にテストコードを書き換えた結果が下記になります。
Minitest
static_pages_controller_test.rb
class StaticPagesControllerTest < ActionDispatch::IntegrationTest
test "should get home" do
get static_pages_home_url
assert_response :success
assert_select "title", "Ruby on Rails Tutorial Sample App"
end
test "should get help" do
get static_pages_help_url
assert_response :success
assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
end
test "should get about" do
get static_pages_about_url
assert_response :success
assert_select "title", "About | Ruby on Rails Tutorial Sample App"
end
end
RSpec
static_pages_spec.rb
require "rails_helper"
RSpec.describe "StaticPages", type: :request do
before do
@base_title = "Ruby on Rails Tutorial Sample App"
end
describe "Home page" do
it "should get home" do
visit static_pages_home_url
expect(page.status_code).to eq(200)
expect(page).to have_title "#{@base_title}"
expect(page).not_to have_title "Home |" # タイトルに「Home |」が含まれていないことを確認
end
end
describe "Help page" do
it "should get help" do
visit static_pages_help_url
expect(page.status_code).to eq(200)
expect(page).to have_title "Help | #{@base_title}"
end
end
describe "About page" do
it "should get about" do
visit static_pages_about_url
expect(page.status_code).to eq(200)
expect(page).to have_title "About | #{@base_title}"
end
end
end
###ポイント
「 expect(page).to have_title "xxx" 」 だけでは "xxx" がタイトルに含まれていればテストをパスするので、例えタイトルに含まれていて欲しくない "yyy" がタイトルに含まれていてもテストをパスしてしまいます。そのため、タイトルに "xxx" が含まれていて "yyy" がが含まれていないことを確認するためには、上記のエクスペクテーションの他に 「 expect(page).not_to have_title "yyy" 」 を追加で記述し、別途タイトルに "yyy" が含まれていないことを確認する必要があります。
##次回
「第5章」のテストコードを RSpec に書き換える予定です。