Ruby on Railsチュートリアル第2版のテストをRSpec3で書いた時の変更点
Railsチュートリアルの第2版でRSpec3を使ってみたら、予定通りいくつかのエラーに対処する羽目に陥ったので、書き留めておきます。
設定の記述先をspec_helperからrails_helperへ変更
第3章で、Capybara DSL
をヘルパーファイルに追加する際に、spec_helper.rb
ではなくrails_helper.rb
に記述しました。
spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install' ENV['RAILS_ENV'] ||= 'test' ・ ・ ・ RSpec.configure do |config| # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures ・ ・ ・ config.include Capybara::DSL end
RSpec3
では、spec_helper
とは別に、Railsでrspecを使うためのrails_helper
が作成されたそうで、rails generate
で生成されるテストコードがrails_helper
をrequire
しています。
そのため、Capybara
の読み込みとかRailsでrspecを使うための設定はrails_helper
に記述するようです。
spec/supportディレクトリの自動読み込みを有効化
第5章で、spec/support
ディレクトリとutilities.rb
ファイルを作成しますが、rails_helper
に記述されいてるspec/support
ディレクトリの自動読み込みの箇所がコメントアウトされているため、アンコメントして有効化します。
spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install' ENV['RAILS_ENV'] ||= 'test' ・ ・ ・ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } ・ ・ ・
be_falseはbe_falseyに変更
第6章で、パスワードの確認に使用しているbe_false
は、be_false
の名称が動作に対して違和感があったらしくbe_falsey
に変更されたそうなので、be_falsey
を使いました。
spec/models/user_spec.rb
require 'spec_helper' describe User do ・ ・ ・ specify { expect(user_for_invalid_password).to be_falsey } end end end
itsを使うためにgemのrspec-itsを追加
第8章で、記憶トークンのテストに使用しているits
メソッドはRSpec3では無くなったため、rspec-its
gemを使ってits
メソッドを使えるようにしました。
Gemfile
Gemfileにrspec-its
を追加*1してbundle install
gem 'rspec-rails', '3.4.2' gem 'rspec-its', '1.2.0'
spec/rails_helper.rb
rails_helper
でrequire 'rspec/its'
する
# This file is copied to spec/ when you run 'rails generate rspec:install' ENV['RAILS_ENV'] ||= 'test' ・ ・ ・ # Add additional requires below this line. Rails is not loaded until this point! require 'rspec/its' ・ ・ ・
参考記事
- RSpec の入門とその一歩先へ、第3イテレーション ~RSpec 3バージョン~ - Qiita
- RSpec3でspec/support内のファイルを読み込む - Qiita
- RSpecの最新の動向・RSpec 3へのアップグレードガイド - Qiita
- Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
*1:gemのバージョンは適当に最新版を選びました