Rails集成测试 - 如何模拟错误的CSRF令牌和过期的会话

时间:2014-10-23 15:01:19

标签: session ruby-on-rails-4 integration-testing csrf

我刚刚在application_controller.rb中更改了异常处理代码,以正确捕获ActionController::InvalidAuthenticityToken

我以前做的是rescue_from Exception,它是在recuse_from ActionController :: InvalidAuthenticityToken之后定义的。这是优先事项,我的目标rescue_from代码没有被执行。

我想编写一个集成测试来验证此行为。如何创建一个对象,允许我将错误的CSRF令牌发送到帖子请求以模拟此行为?

我还希望有一个对象可以让我模拟一个过期的会话来发出一个get请求。我该如何实现这些集成测试?

1 个答案:

答案 0 :(得分:2)

可以使用以下方法模拟错误的CSRF令牌:

with_forgery_protection do
    post user_session_path, {:authenticity_token => 'foo'}
    assert redirected_to_new_user_session_path
end

可以使用TimeCop gem模拟过期的会话:

Timecop.travel 2.days.from.now do
    get some_authorized_path
    assert_redirect_to new_user_session_path
end