Ruby on rails 未能通过集成测试确认电子邮件(rspec/email spec/capybara/designe)

Ruby on rails 未能通过集成测试确认电子邮件(rspec/email spec/capybara/designe),ruby-on-rails,ruby,rspec,devise,rspec-rails,Ruby On Rails,Ruby,Rspec,Devise,Rspec Rails,我一直试图通过集成测试来模拟Desive的确认,但每当我尝试模拟单击确认链接(即,从电子邮件消息),即使电子邮件成功发送,也没有进行确认 测试:(注册较早,并且成功) 。结果为: Failure/Error: expect(new_user.confirmed?).to eq true expected: true got: false (compared using ==) 即使电子邮件已经发送,并且确认过程实际上在测试之外工作,为什么确认过程没有在该代

我一直试图通过集成测试来模拟Desive的确认,但每当我尝试模拟单击确认链接(即,从电子邮件消息),即使电子邮件成功发送,也没有进行确认

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

。结果为:

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

   expected: true
        got: false

   (compared using ==)  

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

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

要修复此问题,请先不要使用
sleep

然后,用UI的方式测试它,也就是说,不要期望用户拥有一些东西。相反,用户界面应该有一些东西

click_first_link_in_email
expect(page).to have_content(/confirmed/)
如果您确实需要测试
用户
,请尝试
重新加载
,但仍应在UI事件之后进行测试,以达到等待效果

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

我需要测试对象本身,以确保Desive正常工作(更新后它曾损坏过一次)。不管怎样,第二个解决方案奏效了。非常感谢。
click_first_link_in_email
expect(page).to have_content(/confirmed/)
user.reload
expect(user).to be_confirmed