RailsでRspecを使用するための準備など
新規のrailsプロジェクトを作る度に毎度調べながらやっていたので、備忘録的にまとめました。
Gemfileの設定
以下4つのgemを使用します。追記した後、bundle installを実行してください。
group :development, :test do
・
・
・
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'guard-rspec', require: false
gem 'terminal-notifier-guard'
end
これで今回使用する、Rspec, Guard, FactoryGirlはすべてインストールされます。
Rspecの初期設定
Rspecの初期設定を行っていきます。以下のコマンドで、設定ファイルを生成します。
~ bundle exec rails g rspec:install
これでrspecコマンドを実行することでテストを実行することができます。
scaffoldなどで適当なcontrollerを作って試していただければと。
~ bundle exec rspec
Guardによるテストの自動化
毎度rpsecコマンドを打つのは手間だと思いますので、Guardというgemを使って自動化してしまいます。
Guardはspecファイルを保存する度に、自動でテストが実行されます。
以下のコマンドで設定ファイルを生成します。
~ bundle exec guard init rspec
これでGuardfileというファイルが生成されているかと思います。
この中に監視対象のファイルを記載することで、実行ファイルを絞ることができます。
Guardの実行
では、実際にGuardを実行してみます。
~ bundle exec guard
これでguardが待機状態になるかと思います。この状態になったらspecファイルを変更し保存をかけてみてください。guardが自動でファイルの変更を検知し、テストを実行してくれます。
FactoryGirlによるテストデータの生成
ここまでで簡易的ではありますが、自動でrspecのテストを実行することができるようになったかと思います。
最後にテストで一番面倒な、テストデータの生成に役立つFactoryGirlを紹介します。
概要
FactoryGirlは先ほど説明した通り、テストデータの定義を簡易化してくれるためのgemです。
使い方の流れとしては、以下の通りです。
- spec/factories以下にファイルを作成し、テストデータを定義
- テストデータが必要な場面でファイルを読み込んで、使用(この時加工も可能)
テストデータの生成
以下のようにしてテストデータを定義していきます。
FactoryGirl.define do
# factory名とModel名が一緒の場合
factory :user do
name "yu_0105"
password "password here"
end
# factory名とModel名が異なる場合
factory :admin, class: User do
name "yu_0105"
password "password here"
end
end
テストデータの呼び出し
先ほど生成したfactoryを呼びためには以下のようにします。
user = FactoryGirl.create(:user)
# ハッシュを指定することで上書き可能
user = FactoryGirl.create(:user, { name: 'who?', password: 'password here' })
FactoryGirlは他にも様々なテストデータの定義の方法があります。他の手法に関しては、こちらのチートシートがとてもわかりやすいです。