【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 #個別のファイルを実行
おしまい。
-
前の記事
【Rails6】Devise + Bootstrapで管理画面用認証機能を作る 2020.05.01
-
次の記事
【javascript】画像のプリロード 2020.05.19