Rspec如何测试未确认邮箱用户的邮件返回ActionMailer::Base::NullMail
问题原因
Rails的ActionMailer邮件方法默认不会直接返回你定义的邮件实例,而是返回一层ActionMailer::MessageDelivery代理对象,你代码里返回的NullMail实例是被包裹在这个代理对象内部的,所以直接对方法返回值做类型判断会失败。
修复方案
只需要调用MessageDelivery实例的message方法,即可取出内部实际的邮件实例,修改测试代码如下:
expect(TestMailer.test_mail(expired_account).message).to be_an_instance_of(ActionMailer::Base::NullMail)
如果你的场景需要先触发投递逻辑再判断,也可以用下面的写法,效果一致:
mail = TestMailer.test_mail(expired_account).deliver_now expect(mail).to be_an_instance_of(ActionMailer::Base::NullMail)
补充说明
NullMail实例本身会被Rails邮件体系识别为不需要投递的邮件,即使调用deliver_now也不会真的发送邮件,符合你“邮箱未确认就不发送邮件”的业务需求。
内容的提问来源于stack exchange,提问作者Linda Kadz
相关产品推荐
相关产品推荐

