【Rails6】RSpec+FactoryBotの導入

【Rails6】RSpec+FactoryBotの導入

RspecはRubyにおけるテスティングフレームワークです。
動く仕様書として自動テストを書く発送で作られており、ドキュメントを記述するような感覚でテストケースを記述することができます。
今回は、RailsプロジェクトにRspecとテスト用データの作成をサポートするGemであるFactoryBotを導入します。

動作環境

macOS Catalina 10.15.4
ruby 2.7.1
Rails 6.0.2.2

Gemのインストール

アプリケーション直下のGemfileにRSpecとFactoryBotのgemを追加し、bundleコマンドを実行します。

group :development, :test do
  gem 'rspec-rails', '~> 4.0.0'
  gem 'factory_bot_rails', '~> 5.2.0'
end
bundle

gemのインストールが終わったら、generateコマンドを実行し、Rspecに必要なディレクトリ類を作成します。

rails g rspec:install

Railsアプリでデフォルトで作られるtestディレクトリは削除します。

rm -r ./test

Capybaraを使う準備

次にWebアプリケーションのE2EテストフレームワークであるCapybaraを利用するための準備をします。またテストを実行する度にブラウザが毎回表示されることがないよう、Headlessブラウザを使うことにします。

spec/spec_helper.rb

require 'capybara/rspec'

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :selenium_chrome_headless
  end
  # rspec-expectations config goes here. You can use an alternate
---中略---
end

これでテストができる環境が整いました。

FactoryBotメソッドの省略

rails_helperに以下を記述することでFactoryBotメソッドが省略できて楽になります。

RSpec.configure do |config|
  # FactoryBotメソッドの省略
  config.include FactoryBot::Syntax::Methods
---中略---
end

使用例

require 'rails_helper'

describe 'ユーザー管理機能', type: :system do
    before do
      create(:admin_user) #Factorybotでテストデータを作成
    end

    context 'ユーザーがログインしているとき' do
      before do
        visit new_user_session_path
        fill_in 'Email', with: 'test1@example.com'
        fill_in 'Password', with: 'password'
        click_button 'Log in'
      end

      it 'ログイン後のフラッシュメッセージが表示される' do
        expect(page).to have_content 'Signed in successfully.'
      end
    end
end

Rspecの実行コマンドは以下の通り。

bundle exec rspec spec #全てのファイルを実行
bundle exec rspec spec/【ファイル名】.rb #個別のファイルを実行

おしまい。