RSpec導入方法まとめ
Railsチュートリアル、POTEPANサブ課題終わり、本課題に突入しているが、RSpecは一から学んでいる状態なので、導入方法を備忘録としてまとめておく。※ Everyday Rails- RSpecによるRailsテスト入門 から抜粋
1. gemのインストール
gemfileの開発環境とテスト環境にrspec-railsを追加し、bundle install
group :development, :test do gem 'rspec-rails' end
2. RSpecの設定
rails generate でrspecをインストールする
$ rails g rspec:install => create .rspec => create spec => create spec/spec_helper.rb => create spec/rails_helper.rb
4つのファイル・ディレクトリが作成される。
4. (開発効率化)
必須ではない。テストの起動速度が早くなる。
group :development do # 元から書かれている gem は省略 ... gem 'spring-commands-rspec' end
$ bundle install $ bundle exec spring binstub rspec # => bin ディレクトリ内に rspec という名前の実行用ファイルが作成される
5. ジェネレータの設定
config/application.rb
require_relative 'boot' require 'rails/all' Bundler.require(*Rails.groups) module Projects class Application < Rails::Application config.load_defaults 5.1 # Rails が最初から書いているコメントは省略 ... config.generators do |g| g.test_framework :rspec, fixtures: false, view_specs: false, helper_specs: false, routing_specs: false end end end
テストファイルの作り方
$ rails g rspec:controller [Controller_name] $ rails g rspec:model [Model_Name]
FactoryBotの使い方
fixtureのようにユーザーの属性値を前もって設定できる。
Gemfile
group :development, :test do gem "rspec-rails", "~> 3.6.0" gem "factory_bot_rails", "~> 4.10.0" # このグループの他の gem が並ぶ ... end
ファクトリを作成する際のコマンド
$ bin/rails g factory_bot:model user
フィーチャースペックの導入方法
※追記:Docker上で動かすための設定は以下記事を参照
Docker 環境に Entrykit と ChromeDriver を導入する - こたつとみかんとプログラミング
1. 必要なgemの追加(capybaraは5.1以降標準搭載されているので必要なし)
Gemfile
group :test do gem 'capybara' gem 'webdrivers' gem 'launchy' end
Webdrivers テストをchromeで行うために必要なgem(詳細は後述)
Launchy save_and_open_page をスペック内で呼びだしたときに、Launchy が保存された HTML を自動的に開いてくれるgem。
2. RSpec が Capybara を読み込むように設定
spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate # rspec:install' ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../../config/environment', __FILE__) # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if \ Rails.env.production? require 'spec_helper' require 'rspec/rails' # Add additional requires below this line. Rails is not loaded # until this point! require 'capybara/rspec' # RSpec の設定が続く ...
3. supportディレクトリの有効化
spe/rails_helper.rbでrailsをカスタマイズしたいが、rails_helper.rbをきれいに保っておきたい場合、以下の設定のコメントを外して有効化することで、 support ディレクトリが使用できるようになり、以下ディレクトリに新規ファイルを作ることで、独立したファイルに新しい設定を書くことができる。
spec/rails_helper.rb
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
4. chrome でテストできるように設定する
デフォルトでは Capybara は selenium-webdriver に対して Firefox を使ってテストを実行するように伝えるが、最近登場した新しいバージョンの Firefox では互換性問題が報告されているらしい。かわりに Chrome を使うように設定する。
supportディレクトリに新規ファイルを作成
spec/support/capybara.rb
Capybara.javascript_driver = :selenium_chrome
以下、参考にしたいサイト
https://devhints.io/capybara
https://qiita.com/jnchito/items/607f956263c38a5fec24