最近RSpecを使い始めたので、導入手順をメモ
環境
Rails 6.0.3.6
MySQL
Docker
--skip-test
を指定して new
Gem
.
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'capybara'
gem 'rspec-rails'
gem 'factory_bot_rails'
end
.
webmock
等は一旦入れない予定で。
RSpecをインストール
bin/rails g rspec:install
Running via Spring preloader in process 167
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
上のように4つ作成される。
-
.rspec : RSpec用の設定ファイル
-
spec : スペックファイルを格納するディレクトリ
-
spec/spec_helper.rb, spec/rails_helper.rb : RSpecでカスタマイズするヘルパーファイル
テスト用のDB準備
bin/rails db:migrate RAILS_ENV=test
RSpecの書式変更
--format documentation
を追加することで、RSpecの出力を読みやすいドキュメント形式に変更することができる
--require spec_helper
--format documentation
FactoryBot設定追加
以下の様に設定することで、FactoryBotのメソッドの呼び出しが楽になる。
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
end
(例)
# 設定前
user = FactoryBot.create(:user)
# 設定後
user = create(:user)
rails_helper.rbに設定追加
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
がコメントアウトされているので、それを外す。
そうすることで、spec/support/配下のファイル
を読み込むことができる。
require 'spec_helper'
.
.
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
.
RSpec.configure do |config|
.
.
rspec生成ファイルの定義を修正
プロジェクト作成時に--skip-test
を指定していると、Minitest
が作られないが、それと同時にRSPecを導入しても、Model等を生成した時に、同時にrspecファイルを生成してくれないようになっているため設定する。
下記コードの一番上の行をコメントアウトにし、以下の様に設定を追加する。false
を設定してrspecファイルは自動生成されなくなる。
# config.generators.system_tests = nil
config.generators do |g|
g.test_framework :rspec,
fixtures: false,
routing_specs: false
end
RSpecを起動してみる
ここまで設定したら、動作確認してみましょう
bundle exec rspec
No examples found.
Finished in 0.00231 seconds (files took 0.17073 seconds to load)
0 examples, 0 failures
テストファイルは書いていませんが、RSpecが動作していることは確認できました
後日、capybaraの設定等を追加します