Rails:如何在集成测试中登录Devise用户?

时间:2017-11-18 12:29:49

标签: ruby-on-rails devise integration-testing

我正在尝试测试登录用户是否可以访问管理页面。

我在灯具中设置了一个用户:

user_one:
  email: user_one@test.com
  encrypted_password: <%= User.new.send(:password_digest, 'password') %>

在测试中,我登录并导航到管理页面。但测试因重定向而失败。

class AdminTestLoggedIn < ActionDispatch::IntegrationTest
  test "Log in" do
    post user_session_path, params: {user: {
      email:    users(:user_one).email,
      password: "password"
    }}

    get admin_path
    assert_response :success
  end
end

我可以看到重定向指向登录页面:

  test "Log in" do
    ...

    assert_redirected_to new_user_session_path
  end

所以,看起来我还没有登录。我哪里出错了?我的猜测是我无法正确处理密码加密。如果是这样,应该怎么做?

1 个答案:

答案 0 :(得分:2)

我的初始测试失败,因为我将用户设置为:confirmable,但user_one没有:confirmed_at日期。没有确认,用户无法登录,因此admin_path正在重定向。

修复方法是在:confirmed_at中设置users.yml

user_one:
  email: user_one@test.com
  encrypted_password: <%= User.new.send(:password_digest, 'password') %>
  confirmed_at: <%= Time.now %>