RSpec2からRSpec3にバージョン上げたらテストがFailしまくった話

遊びで作ってるRailsアプリケーションのRSpecのバージョンを2から3に上げたら、2では全部通ってたテストが3にした途端テストが100個くらいFailした。一体何が起こっているかわからなかったのでRSpec3の挙動の違いを調べてみることにした。

rspec-railsbundle installしたあとrspec:installする。

$ rails g rspec:install
create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb

今までなかったrails_helper.rbってのが作られている。scaffoldで生成されるspecディレクトリの構成はこう。

spec
├── controllers
│   └── users_controller_spec.rb
├── helpers
│   └── users_helper_spec.rb
├── models
│   └── user_spec.rb
├── rails_helper.rb
├── requests
│   └── users_spec.rb
├── routing
│   └── users_routing_spec.rb
├── spec_helper.rb
└── views
    └── users
        ├── edit.html.erb_spec.rb
        ├── index.html.erb_spec.rb
        ├── new.html.erb_spec.rb
        └── show.html.erb_spec.rb

試しにspec/controllers/users_controller_spec.rbを開いてみると冒頭がこんな感じになっていました。

require 'rails_helper'

RSpec 3 時代の設定ファイル rails_helper.rb について

というわけで、これまで require ‘spec_helper’ としていた箇所の大部分は require ‘rails_helper’ に置換してあげる必要がありそうですね。パーフェクト Ruby on Rails のテストの章は require ‘spec_helper’ となっているので、RSpec 3 のリリース版を利用する場合は適宜読み替えをお願いします。

spec_helperrails_helperに変えて、それらの2ファイルの設定をRSpec3用に見直せば全てのテストが問題なく通るようになりました、とさ。

RSpec3よりruby1.8,ruby1.9をサポートしなくなったり新しいマッチャーが増えたりしてるので変更点を下記より再度確認してみるとよいと思います。

Notable Changes in RSpec 3