【问题标题】:Rspec test if a session variable was set in a controller actionRspec 测试是否在控制器操作中设置了会话变量
【发布时间】:2013-05-01 21:16:20
【问题描述】:

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

【问题讨论】:

  • 那么这件事的真正原因是什么? (因为您勾选了答案但没有真正解释)
  • 我提出的问题的答案是正确的,但我的问题最终与我的问题无关

标签: session testing rspec


【解决方案1】:

您可以像这样在 rspec 中直接访问会话:session[:key]。只需将其与您想要的值进行比较即可。

【讨论】:

  • 对不起,我想我应该说我试过的。我试过了,但会话是空的。规范有一个空会话,但以正常方式使用控制器,它可以工作
  • @Chris,我已经这样做了很多次,所以我知道它有效。如有需要,请粘贴代码。
【解决方案2】:

this。主要问题是变量session 无法从测试代码中访问。要解决它,请在 spec/spec_helper.rb 处添加 fowling 行:

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

【讨论】:

  • 这可能是我发布此内容时实际错误的答案。
【解决方案3】:

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

例如,您的控制器中可能有这一行:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多