読者です 読者をやめる 読者になる 読者になる

いつクリはてブロ

いつになったらクリエイティブするの?

RSpec3では「ディレクトリ名によってテストの種類を自動的に判別」がオフになっている

RSpec3がいつの間にかリリースされていた。
そうとは知らず、何も考えずにbundle updateしたら急に今まで何の問題もなく動いていたテストが動かなくなったので焦った。
原因は以下。

ディレクトリ名によってテストの種類を自動的に判別する機能がデフォルトでオフになっている

Railsで使う場合、今まではspec/controllersやspec/models以下にspecファイルを置けば、それが自動的にcontrollerやmodelのテストだと判断してくれていたが、RSpec3からはデフォルトではオフになっているとのこと。
なのでRSpec2から移行してテストを実行するとcontrollerならこういうエラーが出る。

     Failure/Error: get 'index'
     NoMethodError:
       undefined method `get' for #<RSpec::ExampleGroups::UsersController::GETIndex:0x007f8416403520>

げ、getが見つからんだと!? と思って調べた結果をこの記事にまとめる。

対策:infer_spec_type_from_file_location!オプションを指定する

従来通りディレクトリ名から自動で判別してもらうにはspec_helper.rbに以下のように記述する。

# spec_helper.rb
RSpec.configure do |config|
  config.infer_spec_type_from_file_location!
  # ...

いつも通りに動いていたものが急に動かなくなったらまずライブラリのアップデートを疑え、肝に銘じておきます……。

参考

既存のRailsプロジェクトをRSpec 3.0にアップグレードする際の注意点 ~RSpec 3は怖くないよ!~ - Qiita
他にもRSpec3の変更点は多そうなので、まだこの記事のお世話になることがありそうだ。