19753


rspec2.99でテストが全部OKになった状態でrspec3.0.1に上げたら以下エラーが出るようになりました。

[code]

     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'
    
[/code]

エラーが出ている箇所のform.html.erbはテキストを表示しようとしています。

[code]

                    <%= f.text_field :hoge_memo, :placeholder => t('.input.hoge_memo') %>
    
[/code]

テストコードはレスポンスを正常なことを確認しており、mock1にhoge_memoを定義するとエラーは出なくなりました。が、同じようにエラーになっている箇所が多くあり全部定義する以外に修正方法は無いでしょうか？

[code]

     -  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
    
[/code]

エラー箇所はgems/activesupport-4.0.13/lib/active_support/core_ext/string/output_safety.rb  
の24行目でsにnilが渡ってきてgsubメソッドが無いとエラーになっているようです。

[code]

     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
    
[/code]


CC BY-SA 3.0
2015-12-08T04:34:20.237
19749
2015-12-08T06:25:39.063
10851
question
ruby-on-rails ruby rubygems rspec
rspec2.99からrspec3.0.1に上げたらundefined method `gsub' for nil:NilClassエラー発生


すみません。[こちらの問題](https://ja.stackoverflow.com/questions/19299/rspec%E3%81%A7cant-
convert-rspecmocksdouble-to-
array%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B)に派生して出ていたエラーでした。

[code]

    can't convert RSpec::Mocks::Double to String (RSpec::Mocks::Double#to_str gives RSpec::Mocks::Double)
    
[/code]

上のエラーが出ていましてmockのto_aryとto_aの呼び出しを無視するスタブを呼ぶことで解決しました。


CC BY-SA 3.0
2015-12-08T06:25:39.063
19753
2015-12-08T06:25:39.063
2017-04-13T12:52:39.113
-1
10851
19749
answer