はじめに
RSpecコトハジメ ~初期設定マニュアル~と公式ドキュメントを参考にしつつ、RSpecのインストールを実施します。
環境
- ruby 2.6.5p114
- Rails 6.0.0
Railsインストールはこの記事を参照してください。
Windows10のWSLでRails環境構築
RSpecインストール
参照:rspec/rspec-rails
公式の手順に沿って、インストールしていきます。はじめにGemfileを編集します。
group :development, :test do
[省略]
gem 'rspec-rails', '~> 4.0.1'
end
Gemfileの編集が終わったら、プロジェクトディレクトリ直下で下記のコマンドを実行します。
# RSpecインストール
$ bundle install
# 定型的な設定ファイルの作成
$ rails generate rspec:install
Running via Spring preloader in process 266
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
RSpec用のディレクトリと、設定ファイルが作成されました。以降はRSpecを使用するため、Minitest用の/test
ディレクトリは削除します。
# testディレクトリの削除
$ rm -rf test
初期設定
作成された.rspec
ファイルに設定を追加します。
--require spec_helper
--color
--format documentation
オプション名 | 説明 |
---|---|
require | 呼び出すファイルの指定 |
coler | 出力結果に色を付ける |
format | 出力形式の設定 |
参考:Command line - RSpec Core - RSpec - Relish |
この設定によりspecファイルに require 'spec_helper'
を記載せずに済みます。出力結果もただのドットでなく、文章形式で出力されます。
基本設定はこれで終了です。
テスト系Gem
とりあえず、リストだけ乗っけておきます。あとでFake系サービスなども追加予定です。
Gem名 | URL |
---|---|
factory bot | thoughtbot/factory_bot_rails |
rubocop-rspec | rubocop-hq/rubocop-rspec |
webmock | bblimke/webmock |
おまけ database_cleanerについて
Rails 5.1以降のシステムテストをRSpecで実行する(翻訳)
参照した記事に書いてありましたが、Rails 5.1以降はdatabase_cleanerは不要になりそうです。ただ、database_cleanerが自動でインストールされるのではなく、System Specにロールバック機構が実装されるようです。そもそも
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
参考:Transactions - RSpec Rails - RSpec - Relish
上記の設定があれば、RSpecで実行されたデータベース操作はトランザクション上で処理され、ロールバックにより削除されます。なぜdatabase_cleanerを導入していたかというと
[翻訳+α] Rails/RSpec/Capybara/Seleniumでdatabase_cleaner gemを使う
上記の設定はあくまで、RSpecのプロセスで有効に動作するもので、Capybara/Selenum等を使用したユーザ操作のエミュレート(Feature Spec)だと有効に働かなかったからです。それなので、テスト時に細かくDBのクリーンアップを設定したい!System Specでなく、Feaature Specをまだ使用している、という以外ではdatabase_cleanerは不要となります。