🎈

【Rails】Rspecの環境構築手順をざっくりまとめてみた

2021/07/29に公開

1.この記事をなぜ書いたか

Rspecを勉強して学んだことをまとめるために書きました。
今すぐRspecの環境構築手順を見たい方は、4章から見ることをオススメします。

記事の中で間違いがある場合、コメント頂けると嬉しいです。

2.そもそもRspecとは何か?

Rspecとは、「プログラムの振る舞い」を記述するためのドメイン特化言語(DomainSpecific Language:DSL)を提供するテストフレームワークのことです。 ドメイン特化言語とは、特定のドメイン(問題領域)を記述するために設計された言語です。Rspecの場合、特定のドメインは「開発対象のプログラムの振舞い」を表します。

そして、Rspecが提供するDSLを使用してテストコードを書くことによって、Railsアプリケーションの挙動をテストすることができます。

3.Rspecとminitestの違いとは?

テスト機能を提供するフレームワークの1つに、Ruby標準のminitestがあります。
minitestとRspecの大きな違いは、minitestが一般的なテストフレームワークなのに対し、Rspecは様々なテスト関連ライブラリや周辺ツールとの連携を積極的に行い、「統合テスティング環境」になることを目指すテストフレームワークであるところです。

もしminitestについてもっと知りたい方は以下のサイトがオススメです。
https://qiita.com/kenkenkengo-y/items/5fb3f3602dcf3826ce19

上のサイトを参考にする限り、minitestでRspecと同じことを実現する場合、時間がかかることが分かりました。個人的には性能の比較は重視してなく、テストコードの見やすさの点でRspecの方が優れてると感じました。

4.Rspecの環境構築

以下にRspecの環境構築手順を示します。

  1. rspec-railsをGemfileに書きます。FactoryBotもテストで使用したいので、factory_bot_railsも一緒にインストールします。
Gemfile.rb
  group :development, :test do
    gem 'rspec-rails', '~> 4.0.0' #Rails 5.xでRspecを使用する場合、このようにバージョン指定する。
    gem 'factory_bot_rails'
  end

ちなみに、Railsのバージョンに合わせて、どのバージョンのRspecをインストールするかはGithubで確認できます。
https://github.com/rspec/rspec-rails#rspec-rails--

  1. Gemをインストールします。
ターミナル
  bundle install
  1. 以下のコマンドを実行します。
ターミナル
  rails g rspec:install
  1. コマンドを実行することで、specディレクトリと設定ファイル(.rspec, spec_helper.rb, rails_helper.rb)が生成されることを確認します。
ターミナル
  create  .rspec
  create  spec
  create  spec/spec_helper.rb
  create  spec/rails_helper.rb
  1. テストの実行結果の表示を読みやすくするために、.rspec-format documentationを書きます。
.rspec
  --format documentation
  1. vendor/bundle以下に取得したRubyのライブラリをリモートリポジトリにプッシュしたくないです。そのため、.gitignore/vender/bundleを書きます。
.gitignore
  /vendor/bundle
  1. spec/support/配下のファイルを読み込むために、以下の一文のコメントアウトを外します。
rails_helper.rb
  Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
  1. FactoryBot.を書いてインスタンスを生成するのは面倒なので、rails_helper.rbに以下の記述をします。
rails_helper.rb
  RSpec.configure do |config|
    config.include FactoryBot::Syntax::Methods
  end
  1. 特定のテストケースのみ実行できるようにしたいので、以下のコードをspec_helper.rbに追加します。
spec_helper.rb
  RSpec.configure do |config|
    config.filter_run_when_matching :focus
  end
  1. 終了

5.終わり

Rspecの環境構築は意外とめんどくさいと感じました笑。

この記事が少しでも役に立てば幸いです!

6.参考文献

https://github.com/rspec/rspec-rails
https://github.com/thoughtbot/factory_bot_rails
https://magazine.rubyist.net/articles/0021/0021-Rspec.html
https://qiita.com/kenkenkengo-y/items/5fb3f3602dcf3826ce19
https://blog.willnet.in/entry/2014/06/10/142341

Discussion