我正在我的ruby on rails 4应用程序中编写测试以用于将来的功能。阅读完RoR指南后,我发现我可以更改config / environments / test.rb文件中的smtp设置,将电子邮件存储在一个数组中,而不是实际发送它们。进行更改后,我仍在运行我的功能规格时收到收件箱中的电子邮件。
环境/ test.rb
var month = '';
switch(mm) {
case '1':
month = 'January';
break;
case '2':
month = 'February';
break;
case '3':
month = 'March';
break;
case '4':
month = 'April';
break;
case '5':
month = 'May';
break;
case '6':
month = 'June';
break;
case '7':
month = 'July';
break;
case '8':
month = 'August';
break;
case '9':
month = 'September';
break;
case '10':
month = 'October';
break;
case '11':
month = 'November';
break;
case '12':
month = 'December';
break;
}
在制作中,我的电子邮件是通过Mandrill API发送出去的。 为了仔细检查我的测试是否在测试环境中运行,我运行:“RAILS_ENV = test rspec spec”,它仍然发送了电子邮件。
功能规范
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
上述代码失败,并显示以下消息:
# Excerpt of feature spec
email = ActionMailer::Base.deliveries.last
email.body.raw_source.should include "Welcome!"
如果我没错,看起来电子邮件不会存储在ActionMailer :: Base.deliveries数组中。
答案 0 :(得分:1)
在阅读了有关mandrill_mailer gem的更多信息之后,我遇到了如何处理离线测试。问题是因为我使用的是mandrill的API,因此无法使用ActionMailer的标准SMTP拦截方法拦截电子邮件。
在我添加的功能规范中:
email = MandrillMailer::deliveries.last
expect(email).to_not be_nil
我还将以下内容添加到spec_helper.rb
require 'mandrill_mailer/offline'