【发布时间】:2012-12-02 20:42:31
【问题描述】:
我的 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:
通过调试,我看到 session 正在从 @request.session 在 ActionDispatch::TestProcess 中访问,而 @request 为零。当我从我的请求规范访问会话时,@request 是 ActionController::TestRequest 的一个实例。
我的问题是我可以从帮助规范访问会话对象吗?如果可以,怎么做?如果我不能测试这种方法的最佳实践是什么?
****更新****
这要归功于我的工厂中有include ActionDispatch::TestProcess。删除此包含可以解决问题。
【问题讨论】:
-
要使用 FactoryGirl 且不使用“ActionDispatch::TestProcess”附加文件,请使用:
image { Rack::Test::UploadedFile.new('spec/factories/test.png', 'image/png') },请参阅:gist.github.com/rugginoso/4079399 和 github.com/gregbell/active_admin/issues/512
标签: ruby-on-rails ruby rspec tdd