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

com*_*ntk 5 rspec ruby-on-rails devise

我们有一个自定义的 SessionsController,它继承自标准的 Devise::SessionsController 并为 User 模型启用了可锁定功能。这在手动测试时有效,但在我们的控制器测试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
}
Run Code Online (Sandbox Code Playgroud)

Elk*_*dov 2

Per Devise 可锁定模块 有一个方法 lock_access!从而锁定访问。这是测试另一种方法的一种方法——蛮力。根据每个设备初始值设定项的需要,在 new_user_session_path 中输入正确的电子邮件和错误的密码,然后测试 new_user_unlock_path。