l'essentiel est invisible pour les yeux

Tuesday, January 30, 2007

RSpec 0.7.5.1 + Ruby-GetText-1.8.0 + Rails 1.2.1でRSpecがエラーを吐くので

先日Rails1.2にバージョンアップしたら、controllerに対してrails_specを実行すると全てエラーを吐くようになった。get, postでリクエストを発行するところでエラーが発生している。


specify "should render 'login'" do
get 'login'
controller.should_render :login
end



% ./script/rails_spec spec/controllers/accounts_controller_spec.rb

.F

1)
NoMethodError in 'When requesting /accounts/login with controller isolated from views should render 'login''
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.split
./spec/controllers/accounts_controller_spec.rb:23:
./script/rails_spec_server:17:in `run'
./script/rails_spec_server:38:

Finished in 0.121637 seconds

2 specifications, 1 failure
%


Gettextによって追加されるbefor filterのinit_gettext中の"request.cgi"でエラーが発生している。

def init_gettext # :nodoc:
cgi = nil
if defined? request.cgi
cgi = request.cgi
end
call_methods_around_init_gettext(@@before_init_gettext)
init_gettext_main(cgi) if @@gettext_domainnames.size > 0
call_methods_around_init_gettext(@@after_init_gettext)

if ::RAILS_ENV == "development"
@@before_init_gettext = []
@@after_init_gettext = []
end
end


このエラーを回避するために、specファイルのsetupメソッド中に次の処理を追加すると解決する。

setup do
# ...
ENV['REQUEST_URI'] = request.request_uri
end