spec_helper.rbの中でRSpec.configure を呼び出している場合、
以下のような警告が出てくることがあります。
pre>>
DEPRECATION WARNING: you are using deprecated
behaviour that will be removed from RSpec 3.
You have set some configuration options after an
example group has already been defined. In RSpec 3,
this will not be allowed. All configuration should
happen before the first example group is defined.
The configuration is happening at:
/path/to/app/spec/spec_helper.rb:50
<<--
これは spec_helper.rb が何度も呼び出されてしまうことで、
configureブロックが2回以上呼び出されてしまうために起こる問題です。
そもそも Ruby の require は一度しかファイルを読み込まないように
なっていますが、読み込んだかどうか判定する基準となるのが
読み込み対象のファイルの絶対パスではなく、require に渡された引数であるため、同じファイルをrequireしてもパスの指定の仕方によって何度も読み込まれてしまうのです。
そこで、以下のように spec_helper.rb の先頭に記述することで、
二度読みを回避して警告されないようにすることができます。
ruby>>
$LOADED_FEATURES.push File.expand_path(FILE)
def require(path)
path = File.expand_path(path) if path =~ %r{^[./]}
super path
end
<<--
require を上書きして引数が "." か "/" で始まっている場合に expand_path を呼び出して正規化しています。
自分自身が呼び出される時のrequireは上書きできないので、
$LOADED_FEATURESに自分自身の絶対パスを追加しておきます。
require は $LOADED_FEATURESにpathが存在するする場合はスクリプトを読み込まなくなります。