Devise Lockable在rspec控制器测试中不起作用

时间:2015-05-15 17:00:40

标签: ruby-on-rails rspec devise

我们有一个自定义的SessionsController,它继承自标准的Devise :: SessionsController,并为User模型启用了可锁定功能。这在手动测试时有效,但在我们的控制器中,测试failed_attempts的增量不会超过1.如果我将maximum_attempts次尝试减少为1,它将成功锁定测试中的帐户,但它仍然不会增加{{ 1}}超过1。

以下是我的测试示例。关于为什么failed_attempts没有增加超过1个控制器测试的任何想法?

failed_attempts

2 个答案:

答案 0 :(得分:1)

我试过这个方法warden.clear_strategies_cache!发布后,我能够锁定帐户。

对于您的示例,它看起来像这样:

it{
  bad_user = create(:user, password: 'passworD1')
  3.times do
    post :create, user: { email: bad_user.email, password: 'asdf' }
    warden.clear_strategies_cache!
  end

  post :create, user: { email: bad_user.email, password: 'asdf' }
  bad_user.reload
  expect(bad_user.failed_attempts).to eq(4)
  expect(bad_user.locked_at).not_to be_blank
}

此致 鲁斯兰

答案 1 :(得分:0)

Devise lockable module 有一个方法lock_access!锁定访问权限。这是测试另一种方式的一种方式 - 蛮力。在new_user_session_path输入正确的电子邮件和错误的密码,每个设备初始化程序需要多次,然后测试new_user_unlock_path。