【问题标题】:Failed to confirm email via integration tests (rspec/email-spec/capybara/devise)无法通过集成测试确认电子邮件 (rspec/email-spec/capybara/devise)
【发布时间】:2013-11-29 12:21:11
【问题描述】:

我一直在尝试通过集成测试来模拟设备的确认,但是每当我尝试模拟点击确认链接(即从电子邮件消息中)时,即使电子邮件已成功发送,也没有进行确认。

测试:(注册较早,成功)

  open_email user[:email]
  #Simulate confirmation
  click_first_link_in_email#Only one link in the email message i.e. confirmation link
  sleep 0.2
  expect(new_user.confirmed?).to eq true# FAILS

..结果:

 Failure/Error: expect(new_user.confirmed?).to eq true

   expected: true
        got: false

   (compared using ==)  

即使发送了电子邮件并且确认过程实际上在测试之外进行,为什么在那个 sn-p 中没有执行确认过程?

【问题讨论】:

    标签: ruby-on-rails ruby rspec devise rspec-rails


    【解决方案1】:

    我认为原因是点击生效的时间延迟。

    要修复,首先不要使用sleep

    然后,以 UI 方式对其进行测试,也就是不要指望用户有什么东西。相反,希望 UI 有一些东西。

    click_first_link_in_email
    expect(page).to have_content(/confirmed/)
    

    如果你真的需要测试user,试试reload,但还是应该在UI之后——有等待效果。

    click_first_link_in_email
    expect(page).to have_content(/confirmed/)
    user.reload
    expect(user).to be_confirmed
    

    【讨论】:

    • 我需要测试对象本身以确保 Devise 工作正常(更新后它损坏了一次)。无论如何,第二个解决方案奏效了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2019-11-23
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多