最新のrspec-railsでコントローラのヘルパーメソッドをスタブする
パーフェクトRuby on Rails読んでてハマったところ。
RSpecでビューのテスト書くとき、こんな風にコントローラのヘルパーメソッドをスタブしているのだけど、
context '未ログインユーザがアクセスしたとき' do before do allow(view).to receive(:logged_in?) { false } allow(view).to receive(:current_user) { nil } end # 中略 end
Failure/Error: allow(view).to receive(:logged_in?) { false } #<#<Class:0x007fa8613dc140> ....> does not implement: logged_in?
怒られるもよう。(rspec-rails v3.1.0で確認)
issueはいくつか上がってて、原因としては存在しないメソッドはスタブできないようになった為のようだ。
- Stub controller helper method on rspec rails 3 · Issue #1076 · rspec/rspec-rails
- Helper for injecting locals to view specs · Issue #1219 · rspec/rspec-rails
context '未ログインユーザがアクセスしたとき' do before do def view.logged_in? end def view.current_user end allow(view).to receive(:logged_in?) { false } allow(view).to receive(:current_user) { nil } end # 中略 end
もにょりつつ一旦こんな感じで凌いだ。