我一直在尝试通过集成测试来模拟设计的确认,但每当我尝试模拟单击确认链接(即,从电子邮件中)时,即使电子邮件已成功发送,也未进行任何确认。
测试:(之前完成注册,并且成功)
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 ==)
即使发送了电子邮件且确认过程实际上在测试之外工作,为什么在该代码段中没有执行确认过程?
答案 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