パーフェクトrails等を読んで学んだ内容をあとあと使えるよう自分用にまとめました。
ちなみにRSpecってのはRailsアプリケーションの開発におけるテストフレームワークのデファクトスタンダードです、ネットで調べれば容易に情報が得られます。
以下のRSpecについてとても勉強になる内容が日本語訳されていますので是非ご参照ください。
Everyday Rails - RSpecによるRailsテスト入門
テストの書き方は以下の投稿を参考にするといい感じ
使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」
使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」
使えるRSpec入門・その3「ゼロからわかるモック(mock)を使ったテストの書き方」
使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」
環境
ruby:ruby 2.3.1
rails:Rails 4.2.6
Rspec:3.5
インストールするgem一覧
実際のところはgem 'rspec-rails'
だけGemfileに追加すれば関連した他のrspec系のgemもインストールしてくれます。bundle exec bundle install
も忘れずに、、、
rspec-core:
豊富なコマンドラインプログラム、柔軟でカスタマイズ可能なレポート、コード例を構成するAPIを提供するスペックランナー。バージョン:3.5
rspec-expectations:
コード例の期待される結果を表すための読みやすいAPIを提供します。バージョン:3.5
rspec-mocks:
複数のタイプの擬似オブジェクトを提供する二重フレームワークをテストし、仕様を実行する環境を厳密に制御できるようにします。バージョン:3.5
rspec-rails:
Railsの組み込みテストフレームワークの代わりにRSpecを使用してRuby on Railsアプリケーションをテストすることをサポートします。バージョン:3.5
※参考:http://rspec.info/documentation/ ←各Gemの概要については左記URLの記載をGoogle翻訳先生に貼った結果です。最近のGoogle翻訳すごーい。
入れると便利なgem一覧
shoulda-matchers :
モデルのテストの際、バリデーション関連のテストコードを簡単に書けるようにしてくれる。
インストール後は以下の記載をspec/rails_helper.rb
に追加する。
詳細は https://github.com/thoughtbot/shoulda-matchers を参照。
Shoulda::Matchers.configure do |config|
config.integrate do |with|
# Choose a test framework:
with.test_framework :rspec
# Choose one or more libraries:
with.library :active_record
with.library :active_model
with.library :action_controller
# Or, choose the following (which implies all of the above):
with.library :rails
end
end
factory_girl_rails :
テスト用のデータの作成を、各モデルの定義用ファイルを作成することにより、比較的簡単にできるようにしてくれる。factory_girl_railsがインストール済みの状態でインストールすると、同時にこいつの定義ファイルも作成してくれます。
データを作成する場合は FactoryGirl.create(:モデル名)
のようなコマンドを使用しますが、RSpecのテストファイル内で短縮系create(:モデル名)
を使用したい場合は以下のような記述を追加します。
require 'support/factory_girl'
ファイルの追加も行います。
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
end
capybara :
エンドツーエンドテストの際に使用するデファクトスタンダードなgem。エンドツーエンドテストの意味はざっくり言うとクライアント→サーバの処理→出力までの一連の流れを確認するテスト。
capybaraはRailsとRSpecに対応しており、それらの設定を使用するためにも以下の記述を追加する必要があります。
require 'capybara/rails'
require 'capybara/rspec'
詳しくは https://github.com/teamcapybara/capybara 参照
poltergeist :
capybaraを使用したエンドツーエンドのテストを行う際に、Javascriptのテストもしたいという場合に使用するgem。Javascriptに対応したGUI環境を必要としないWEBドライバ。
インストールに際し、poltergeistが依存しているPhantomJSをインストールする必要がある。
Windowsならサイトからダウンロードしてインストーラーを実行、MacやLinuxならbrewとかyumとかでインストール。以下brewを使った場合。
brew install PhantomJS
capybaraでpoltergeistを使用する場合は設定ファイルへの記述が必要です。
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
詳しくは https://github.com/teampoltergeist/poltergeist 参照。
database_cleaner :
テストを行う際にデータベースをきれいにしてくれるgem。seleniumやpoltergeistなどのドライバを利用してテストを行う場合はRailsのデータベーストランザクションによるデータベースのロールバックが使えない(別プロセス)ため、当該gemなどを使う必要がある。
使用する際はrails_helper.rb内でトランザクション機能をオフにし、データ削除に関する設定を記述します。poltergeistを使う場合はトランケーション、使わない場合はトランザクションでデータを削除します。
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.append_after(:each) do
DatabaseCleaner.clean
end
設定ファイルの生成
以下のようにコマンドを実行すると設定ファイルが生成されます。
$ bundle exec rails g rspec:install
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
Everyday Rails - RSpecによるRailsテスト入門 より
最初の行にある require 'rails_helper' に気をつけてください。そしてこれをタイプするのに慣れてください。今後すべてのスペックにこの行が含まれることになります。これはRSpec 3で新しく登場した内容です。以前のバージョンでは spec_helper と書いていました。Rails固有の設定はこのファイルに移動しています。その結果、 spec_helper はかなり小さくなりました。この内容は第9章でもう少し詳しく説明します。
以前は全てspec_helper.rbに記載していた内容を、RSpec 3 以降ではRailsに関する設定はspec/rails_helper.rb に、RSpecに関する設定はspec/spec_helper.rbに書くことになったらしいです。
基本的にテストコードを記述するファイルの行頭には必ずrequire 'rails_helper.rb'
が入ります。
モデルのテストファイル生成
下記のコマンドを実行することにより、モデルのテスト用のファイルが作成されます。rspec-rails
がインストールされている状態でモデルを作成した場合は、モデルの作成と同時にテスト用ファイルが作成されるので下記コマンドは実行不要です。
※eventはモデルの名称です。
$ bundle exec rails g rspec:model event
create spec/models/event_spec.rb
テストの実行時は以下のコマンドを実行します。
$ bundle exec rspec spec/models/event_spec.rb
コントローラのテストファイル生成
下記のコマンドを実行することにより、コントローラのテスト用のファイルが作成されます。
※eventはモデルの名称です。
$ bundle exec rails g rspec:controller events
create spec/controllers/events_controller_spec.rb
テストの実行時は以下のコマンドを実行します。
$ bundle exec rspec spec/controllers/events_controller_spec.rb
ビューのテストファイル生成
下記のコマンドを実行することにより、ビューのテスト用のファイルが作成されます。
※eventはモデルの名称、showはアクション名です。
$ bundle exec rails g rspec:view events show
create spec/views/events
create spec/views/events/show.html.erb_spec.rb
テストの実行時は以下のコマンドを実行します。
$ bundle exec rspec spec/views/events/show.html.erb_spec.rb
テストをまとめて実行
プロジェクトのルートディレクトリで以下のコマンドを実行するとまとめてテストを実行できます。
$ bundle exec rspec