あかんわ

覚えたことをブログに書くようにすれば多少はやる気が出るかと思ったんです

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とは別に、Railsrspecを使うためのrails_helperが作成されたそうで、rails generateで生成されるテストコードがrails_helperrequireしています。
そのため、Capybaraの読み込みとかRailsrspecを使うための設定は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-itsgemを使って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_helperrequire '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'
・
・
・

参考記事

*1:gemのバージョンは適当に最新版を選びました