RSpec 和测试 Devise 的邮件
Posted
技术标签:
【中文标题】RSpec 和测试 Devise 的邮件【英文标题】:RSpec and testing Devise's mailer 【发布时间】:2013-05-30 17:59:02 【问题描述】:我在 Devise 中发送确认电子邮件时遇到了一些问题。这就是为什么我想为此功能编写测试。如果我不创建自己的邮件程序,我怎么能做到这一点?
编辑
我决定,这就足够了:
it 'should send an email' do
user
put :complete, params
user.send(:send_confirmation_notification?).should == true
end
如果我遗漏了什么,请告诉我。
【问题讨论】:
对于谷歌搜索的人:我目前正在使用的应用程序有 Devise 3.5.2,并且电子邮件正在被存根。不确定这是否是测试环境的默认设计,或者我只是错过了一些本地配置。我想说的是,有时您可能会遇到无法测试Devise.mailer.deliveries.size
或ActionMailer::Base.deliveries.size
的情况,因为它们始终是0
,因此唯一的方法是使用user.send_confirmation_notification?
进行测试,例如这个问题。小心哦!不要使用user.confirmed_at?
,因为user.skip_confirmation!
正在设置此标志
【参考方案1】:
您是否查看过为 Devise 编写的测试?
https://github.com/plataformatec/devise/blob/master/test/mailers/confirmation_instructions_test.rb
【讨论】:
请求是针对 rspec,但设计的测试不使用 rspec。 不管是 RSpec、MiniTest 还是 Test::Unit,概念和在测试期间要查找的消息都很重要(答案 +1)【参考方案2】:如果您想进行更明确的测试并实际测试电子邮件是使用 RSpec 发送的,这对我有用。
it 'sends a confirmation email' do
user = FactoryGirl.build :user
expect user.save .to change(ActionMailer::Base.deliveries, :count).by(1)
end
【讨论】:
小心,设计邮件默认有自己的邮件,如果您发现副作用,请尝试Devise.mailer.deliveries
而不是ActionMailer::Base.deliveries
)以上是关于RSpec 和测试 Devise 的邮件的主要内容,如果未能解决你的问题,请参考以下文章