2013-05-01 54 views
9

我有rspec测试发布到某个操作。在动作中,会话变量是肯定设置的,但是在我的控制器测试中,会话哈希是空的。如何检查Rspec测试以查看控制器是否将会话变量设置为正确的值?Rspec测试是否在控制器动作中设置了会话变量

+0

那么是什么样的这个实际的原因是什么? (因为你勾选了一个答案,但没有真正解释) – lulalala 2013-11-22 08:02:31

+0

答案对我提问的问题是正确的,但是我的问题最终与我的问题 – chris 2013-12-05 16:00:01

回答

15

您可以直接在rspec中访问会话,如下所示:session[:key]。只需比较你想要的值。

+1

无关。对不起,我想我应该说什么试试。我尝试过,但会议是空的。规范有一个空的会话,但正常的方式使用控制器,它的工作原理 – chris 2013-05-02 16:00:57

+1

@Chris,我已经做了很多次,所以我知道它的工作原理。如果需要,请粘贴代码。 – 2013-05-02 16:34:20

0

您是否在控制器中使用了任何before_filter?这可能是这种情况,如果before_filter更改流程,并且您的代码与会话分配变量甚至没有评估。

例如,你可能有这条线在您的控制器:

# ... 
    before_filter :authenticate_user! 
# ... 

这意味着如果你没有登录,你将永远不会在这个控制器输入任何方法。所以session变量将是空的。

3

参见this。主要问题是变量session不能从测试代码访问。为了解决这个问题,在spec/spec_helper.rb加入打鸟线:

def session 
    last_request.env['rack.session'] 
end 
+0

这可能是我发布这个时候真正错误的答案。 – chris 2016-01-06 20:08:14

相关问题