ruby-on-rails - rails : How do I login a Devise user in an integration test?

标签 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

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

最佳答案

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

修复方法是设置 :confirmed_atusers.yml :

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

关于ruby-on-rails - rails : How do I login a Devise user in an integration test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366078/

相关文章:

ruby-on-rails - rails : how to display image from upload

ruby-on-rails - 自定义设计资源名称

.net - 使用 TestCategory 分解集成测试有好处吗?

javascript - Karma vs 测试框架 Jasmine、Mocha、QUnit

ruby-on-rails - Paypal - 付款后重定向到我自己的页面

ruby-on-rails - 如何在 Mongoid 中保存 embeds_many 关系?

ruby-on-rails - redis存储数据(key-value)多长时间?

ruby-on-rails - 我可以将 devise encrypted_pa​​ssword 与自定义身份验证一起使用吗?

ruby-on-rails - 未定义的方法 `authenticate_user! Devise/Rails 4 中的 Api::PostsController

java - @ReplaceWithMock 与 @Qualifier