Rspecを使う前の事前準備
RSpecのインストール
‘rspec-rails’というgemをインストールするとRSpecとRSpecのrails用の機能がインストールできます。
group :test do
gem 'rspec-rails' # test環境だけにインストールする
end
bundle install
gemのインストールが終わったら以下のコマンドでRSpecに必要なディレクトリと設定ファイルが作成されます。
rails g rspec:install
これでrspecのインストールは終了です。
Capybaraのを利用できるようにする
・Capybaraとは
Webアプリ用のE2E(ある機能の初めから終わりまで)テスティングフレームワークのこと。Webアプリをブラウザで自動実行してくれる。
Capybaraを利用することで、実際にユーザーがアプリを利用する状態をテストすることができます。
・Capybaraの設定
RSpecのテストでCapybaraを使えるようspec/helper.rb
に設定を追記します。
require 'capybara/rspec' # 追加
RSpec.configure do |config|
config.before(:each, type: system) do # ここから
driven_by :selenium_chrome_headless
end # ここまで追加
end
FactoryBotのインストール
・FactoryBotとは
テストデータを簡単に作成できる機能を提供してくれるgemのこと。
・FactoryBotのインストール
group :test do
gem 'rspec-rails'
gem 'factory_bot_rails' # 追記
end
bundle install
RSpecの基本文法
describe '何をテストするのか(テストをする対象)', type: 'specの種類' do
context 'ある状態・状況' do
before do
# テストをする前の事前準備
end
it '個別のテスト内容(~であるべき内容を書く)' do
# テスト内容
end
end
end
'it'が実際のテストに当たる部分。'describe', 'context'は'it'に至るまでの状況の場合分けをする部分です。例えば、ユーザーがログインしているかしていないかで表示が分かれているであろうページをテストする場合
describe 'task一覧の表示をテストする', type: 'system' do
context 'ユーザーがログインしている場合' do
before do
# ユーザーをログインさせておく
end
it 'task一覧が表示されること' do
# task一覧の表示をチェックするコード
end
end
context 'ユーザーがログインしていない場合' do
# before doは必要無い
it ' task一覧が表示されないこと' do
# task一覧が表示されないことをチェックするコード
end
end
end
となります。
2つ目の'context'はユーザーのログインをする必要がないためbefore do
は必要ありません。もし、両方のcontextでユーザーのログインが必要な場合はcontextの外にユーザーログインのbefore do
を記述すればOKです。
・FactoryBotを使いユーザーを作成する
テストをする上で検証しなければいけないデータがある場合、FactoryBotを使いデータを作成しやすい状況にしておきます。
FactoryBot.define do
factory :user do
name {'user_1'}
email {'test@co.jp'}
password {'password'}
end
end
先ほどのテストファイルで使用する場合FactoryBotを使いユーザーを作成、ログインさせる場合
describe 'task一覧の表示をテストする', type: 'system' do
before do
user_a = FactoryBot.create(:user) # ここでユーザーが作られる
end
context 'ユーザーがログインしている場合' do
before do
# ユーザーをログインさせる
end
it 'task一覧が表示されること' do
# task一覧の表示をチェックするコード
end
end
context 'ユーザーがログインしていない場合' do
# before doは必要無い
it ' task一覧が表示されないこと' do
# task一覧が表示されないことをチェックするコード
end
end
end
RSpecを実行する
テストコードが書けたら実際にテストを実行してみましょう。
bundle exec rspec # 実行するファイル名を続けて書くとそのファイルだけが実行される。
2 examples, 0 failure
0 failure
と表示されれば全てのテストが成功していることになります。