rspec使用時、ruby1.9.2で LoadErrorが出たのを修正

まず結論:specファイルでのrequireでのエラー。1.9.2からカレントが$LOAD_PATHにはいらなくなったことによる影響。そこをなんとか修正。


vi message_filter.rb

class MessageFIlter
end

vi spec/message_filter_spec.rb

require 'spec'
require 'message_filter'

describe MessageFilter
end

以前なら動いていましたが

$ spec spec/message_filter_spec.rb 
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- message_filter (LoadError)
以下略...

なんて怒られる。ruby 1.9.2ではセキュリティ上の都合で$LOAD_PATHに"."ことカレントディレクトリが含まれなくなりました。カレントディクトリからの相対パスでrequireしても動かないということです。
代わりとしてKernel#require_relativeというのがあるのでこれを使うとよさそうです。

vi spec/message_filter_spec.rb

require 'spec'
require_relative '../message_filter'
 
 describe MessageFilter do
 end

とすると動きました。

$ spec spec/message_filter_spec.rb 

Finished in 0.032107 seconds

0 examples, 0 failures

もしくは$LOAD_PATHに直接プロジェクトのパスをぶち込むという方法で
vi spec/message_filter_spec.rb

$LOAD_PATH << File.dirname(File.dirname(__FILE__))
require 'spec'
require 'message_filter'

describe MessageFilter do
end

としても動きました。