なんでだろうってハマってたら教えてもらった。マジ感謝
spec/requestsではviewが返ってきて、spec/controllerでは返ってこなくてどっかミスってるんだろうけど全くわからない。
— ひさいち (@hisaichi5518) 2015, 1月 19
@hisaichi5518 routesミスってそうって言ったけど、controllers-specだとデフォルトでviewを描画しない設定があったので、そっちの方が可能性高いかもしれない
— ダメになるクッション (@r7kamura) 2015, 1月 19
経緯
もともとあったactionで、こういうことしてた。
render json: @hoges.to_json( ... )
で、以下のようにレスポンスのbodyを見てあれこれcontrollers specでテストしていた。
get :index expect(JSON.parse(response.body).size).to eq(5)
それをjbuilderを使うように変更したらテストがこけた。requests specもあったので、実行して見てみるとそこではちゃんとviewが返っていて、よくよく見るとcontrollers specでは返ってきてないようである。ちなみにこういうエラーが出ていた。
Failure/Error: expect(JSON.parse(response.body).size).to eq(5) JSON::ParserError: A JSON text must at least contain two octets!
教えてもらった通り、render_views
がcontrollers specでビューを描写する設定っぽかったので、追加してみるとビューが返ってくるようになった。
describe Api::HogesController, type: :controller do render_views ...
ありがてえ!!!!!!!!!!!!!!!!!!
おもったこと
controllers specで、viewのテストしてるのが間違いな気もした。