ApplicationHelperに、バスケットにアイテムがあるかどうかを確認するメソッドがあります。
module ApplicationHelper
def has_basket_items?
basket = Basket.find(session[:basket_id])
basket ? !basket.basket_items.empty? : false
end
end
これが私がこれをテストしなければならない私のヘルパースペックです:
require 'spec_helper'
describe ApplicationHelper do
describe 'has_basket_items?' do
describe 'with no basket' do
it "should return false" do
helper.has_basket_items?.should be_false
end
end
end
end
ただし、テストを実行すると、
SystemStackError: stack level too deep
/home/user/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_dispatch/testing/test_process.rb:13:
これをデバッグすると、@request.sessionのActionDispatch:: TestProcessでセッションにアクセスしており、@requestはnilであることがわかります。リクエスト仕様からセッションにアクセスすると、@requestはActionController::TestRequestのインスタンスになります。
私の質問は、ヘルパー仕様からセッションオブジェクトにアクセスできますか?できればどうやって?また、この方法をテストするためのベストプラクティスがわからない場合はどうすればよいですか?
****更新**** _
これはinclude ActionDispatch::TestProcess
私の工場にあることに帰着しました。このインクルードを削除すると、問題が分類されます。