我的 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 为零。当我从我的请求规范访问会话时,@request 是 ActionController::TestRequest 的一个实例。
我的问题是我可以从帮助规范访问会话对象吗?如果可以,怎么做?如果我不能测试这种方法的最佳实践是什么?
****更新* ***
这取决于include ActionDispatch::TestProcess
我的工厂。删除这个包括对问题进行排序。