【发布时间】:2013-05-01 21:16:20
【问题描述】:
我有一个发布到操作的 rspec 测试。在操作中,肯定设置了会话变量,但是在我的控制器测试中,会话哈希为空。如何检查 Rspec 测试以查看控制器是否将会话变量设置为正确的值?
【问题讨论】:
-
那么这件事的真正原因是什么? (因为您勾选了答案但没有真正解释)
-
我提出的问题的答案是正确的,但我的问题最终与我的问题无关
我有一个发布到操作的 rspec 测试。在操作中,肯定设置了会话变量,但是在我的控制器测试中,会话哈希为空。如何检查 Rspec 测试以查看控制器是否将会话变量设置为正确的值?
【问题讨论】:
您可以像这样在 rspec 中直接访问会话:session[:key]。只需将其与您想要的值进行比较即可。
【讨论】:
见this。主要问题是变量session 无法从测试代码中访问。要解决它,请在 spec/spec_helper.rb 处添加 fowling 行:
def session
last_request.env['rack.session']
end
【讨论】:
您在控制器中使用了before_filter 吗?如果before_filter 更改了流程,并且您将变量分配给会话的代码甚至还没有评估,则可能是这种情况。
例如,您的控制器中可能有这一行:
# ...
before_filter :authenticate_user!
# ...
这意味着如果您没有登录,您将永远不会在此控制器中输入任何方法。所以session 变量将为空。
【讨论】: