使用Rspec进行测试时,在ActionMailer :: Base.deliveries数组中存储电子邮件

时间:2015-04-23 15:34:18

标签: ruby-on-rails rspec actionmailer

我正在我的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数组中。

1 个答案:

答案 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'