やりたいこと
Controller の spec ファイルの中でヘルパーメソッドを利用したい。
実現方法
controller.view_context
に委譲します。
- controller はテスト対象のコントローラーのインスタンスを返します。
- view_context にはビューのインスタンスを返します。
例
ApplicationHelper に定義した nl2br というメソッドを
sisters_controller_spec.rb でも使いたいとします。
app/helpers/application_helper.rb
module ApplicationHelper
# 改行を <br> タグに変換する。
def nl2br(str)
return '' if str.blank?
ERB::Util.h(str).gsub(/(\r\n?)|(\n)/, '<br>').html_safe
end
end
spec/controllers/sisters_controller_spec.rb
describe SistersController, type: :controller do
render_views
describe '#show' do
# controller.view_context に委譲する。
delegate :nl2br, to: 'controller.view_context'
let(:umaru) do
create(
:sister,
name: '土間 うまる',
note: <<-NOTE.strip_heredoc
外では容姿端麗・品行方正・スポーツ万能・成績優秀と、
どれを取っても完璧な「美妹 (びもうと)」として通っている。
しかし、家に帰った途端にグータラな生活を好む「干物妹 (ひもうと)」と化す。
NOTE
)
end
it 'レスポンスが成功すること' do
get(:show, id: umaru.id)
expect(response).to have_http_status(:success)
end
it 'レスポンスボディの中身が正しいこと' do
get(:show, id: umaru.id)
# 呼べる!!!
expect(response.body).to include(nl2br(umaru.note))
end
end
end