我刚刚在application_controller.rb中更改了异常处理代码,以正确捕获ActionController::InvalidAuthenticityToken
。
我以前做的是rescue_from Exception
,它是在recuse_from ActionController :: InvalidAuthenticityToken之后定义的。这是优先事项,我的目标rescue_from代码没有被执行。
我想编写一个集成测试来验证此行为。如何创建一个对象,允许我将错误的CSRF令牌发送到帖子请求以模拟此行为?
我还希望有一个对象可以让我模拟一个过期的会话来发出一个get请求。我该如何实现这些集成测试?
答案 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