无法通过集成测试确认电子邮件(rspec / email-spec / capybara / devise)

时间:2013-11-29 12:21:11

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

我一直在尝试通过集成测试来模拟设计的确认,但每当我尝试模拟单击确认链接(即,从电子邮件中)时,即使电子邮件已成功发送,也未进行任何确认。

测试:(之前完成注册,并且成功)

  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 ==)  

即使发送了电子邮件且确认过程实际上在测试之外工作,为什么在该代码段中没有执行确认过程?

1 个答案:

答案 0 :(得分:2)

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

要修复,请不要先使用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