Rails4.2 MinitestをRSpecに変更する

Railsプロジェクトを新規作成する際下記オプションを使用するとMinitestを除いたRailsプロジェクトが作成される。

$ rails new hoge -T

プロジェクト開始後途中でMinitestからRSpecに変更したくなった場合は何をすればいいのか?
テストコードの移植等には触れない。

1.testディレクトリの削除

testディレクトリにMinitestのテストコードが格納されているのでディレクトリ毎削除する

2.読み込むコンポーネントの修正

当たり前だが1を行っただけではMinitestはアクティブなまま。この状態で何かをgenerateするとMinitest用のファイルがtestディレクトリに作成される。
application.rbで読み込むコンポーネントを指定しているがそこでMinitestを読み込まないようにする。

diff --git a/config/application.rb b/config/application.rb
index 0f21836..d6e2cb0 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -1,6 +1,14 @@
require File.expand_path('../boot', __FILE__)

-require 'rails/all'
+# Pick the frameworks you want:
+require "active_model/railtie"
+require "active_job/railtie"
+require "active_record/railtie"
+require "action_controller/railtie"
+require "action_mailer/railtie"
+require "action_view/railtie"
+require "sprockets/railtie"
+# require "rails/test_unit/railtie"

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.

全部読み込む場合にはrails/allで良いみたいだがそれ以外は個別に書くしかないみたいだ。

ちなみにこの修正を行わなくてもrspec-railsを導入すればrspec用ファイルが生成されるが、余計なコンポーネントを抱えながらになるのでできればやっておきたい。

あとはGemfileにrspec-railsを追加してbundle installすれば-Tオプションつけたのと同じ状態になる。

guard-rspecとspringの連携

既にRailsではspringがデフォルトで導入されている。
当然rspecを使う際にもspringを活用したいので方法を調べた。

github.com
guard-rspecにOptionsとして紹介されているspringを用いた場合のGuardfileの書き方。

おお簡単じゃんということで早速spring rspecを叩くがspringのUsageが表示されるだけ。

github.com
springのREADMEにて解説されている。spring-commands-rspecを使えということらしい。
Gemfileにspring-commands-rspecを追加してbundle install。

インストールした後下記コマンドを叩くとbin/rspecが生成されるはずである。

$ spring binstub --all

生成されるとspring rspecが実行できるようになる。

余談

github.com
guard-springというguard initすれば一発で使えるというgemも見つけたのだが、当方ではすんなり行かなかったので採用しなかった。