设计可锁定在RSPEC控制器测试中不起作用



我们有一个自定义的SessionsController,该controller从标准deapise :: SessionsController继承,并为用户模型启用了可锁定功能。在手动测试时,这起作用,但是在我们的控制器测试中,failed_attempts不会超过1。如果我将maximum_attempts尝试减少到1时,它将成功锁定帐户的测试,但它仍然不会将failed_attempts超过1。

下面是我的测试示例。关于failed_attempts为什么不超越1个控制器测试的任何想法?

it{
  bad_user = create(:user, password: 'passworD1')
  3.times do
    post :create, user: { email: bad_user.email, password: 'asdf' }
  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
}

我尝试了此方法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
}

问候,Ruslan

每个设计可锁定模块有一个方法lock_access!哪个锁定访问。这是测试另一种的一种方法 - 蛮力。在New_user_session_path中输入正确的电子邮件和错误的密码,每次设计初始化器,然后测试new_user_unlock_path。

最新更新