rspec2.99からrspec3.0.1に上げたらundefined method `gsub' for nil:NilClassエラー発生
rspec2.99でテストが全部OKになった状態でrspec3.0.1に上げたら以下エラーが出るようになりました。
2015/12/08 10:36:23 [ERROR] :: ref:[e92-35e1] type:[APPLICATION_ERROR] システムエラー。, undefined method `gsub' for nil:NilClass
2015/12/08 10:36:23 [INFO] ::
/poge/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/activesupport-4.0.13/lib/active_support/core_ext/string/output_safety.rb:24:in `html_escape'
/poge/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/actionpack-4.0.13/lib/action_view/helpers/tags/text_field.rb:10:in `render'
/poge/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/actionpack-4.0.13/lib/action_view/helpers/form_helper.rb:771:in `text_field'
/poge/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/actionpack-4.0.13/lib/action_view/helpers/form_helper.rb:1262:in `text_field'
/poge/hoge/workspace/transpec4.0/app/views/hogehoges/_form.html.erb:119:in `block (4 levels) in _app_views_hogehoges__form_html_erb__287475598865390515_70183742838460'
エラーが出ている箇所のform.html.erbはテキストを表示しようとしています。
<%= f.text_field :hoge_memo, :placeholder => t('.input.hoge_memo') %>
テストコードはレスポンスを正常なことを確認しており、mock1にhoge_memoを定義するとエラーは出なくなりました。が、同じようにエラーになっている箇所が多くあり全部定義する以外に修正方法は無いでしょうか?
- let(:p1){{:name => "hoge"}}
+ let(:p1){{:name => "hoge", :hoge_memo=>3,:dispname => "hogehoge"}}
let(:mock1) do
mock_model(HogeHoge, p1).as_null_object.tap do |hoge|
allow(hoge).to receive(:to_ary).and_return(nil)
allow(hoge).to receive(:to_a).and_return(nil)
end
end
before(:each) do
allow(HogeHoge).to receive(:new).and_return(mock1)
get :new
end
it "レスポンス200" do
expect(response).to be_succes
エラー箇所はgems/activesupport-4.0.13/lib/active_support/core_ext/string/output_safety.rb
の24行目でsにnilが渡ってきてgsubメソッドが無いとエラーになっているようです。
19 def html_escape(s)
20 s = s.to_s
21 if s.html_safe?
22 s
23 else
24 s.gsub(/[&"'><]/, HTML_ESCAPE).html_safe
25 end
26 end