使用amazon ses邮件发送时,Rspec测试失败

时间:2016-05-13 18:02:40

标签: ruby-on-rails rspec

我最近切换了一个rails应用程序,通过amazon ses发送邮件。邮件的发送工作正常,但是测试在邮件项目中失败并出现以下错误:

MDMViewController *rootViewController = [[MDMViewController alloc] init]; self.window.rootViewController = rootViewController;

我将测试环境邮件设置正确设置为:test

TypeError:
       can't convert Fixnum into String
     # (eval):3:in 'send_raw_email'

我可以通过不发送电子邮件来防止错误发生,但是我收到有关邮件未送达的错误。

config.action_mailer.delivery_method = :test

Gem版本如下:

config.action_mailer.perform_deliveries = false
should_change -> { ActionMailer::Base.deliveries.size } do
   result should have changed, but is still 0

有关正在发生的事情或如何解决此问题的任何建议。如果需要任何其他信息,请告诉我。在我改变发送邮件以使用亚马逊ses之前,这工作正常。

编辑:

失败的测试都涉及使用.deliver

发送电子邮件
rails (3.2.12)
rspec (2.8.0)
cucumber (2.3.3)
aws-sdk (1.33.0)

这是在模型和控制器内部,测试只是调用控制器中的相关路径或调用模型中的相关功能。不知道还有什么要显示,因为错误显示它来自send_raw_email这是ses函数,而不是来自应用程序的任何代码。

编辑2:更多代码

以下是其中一项测试,在此示例中,它为模型和每项测试设置工厂。

BlahMailer.send_invite(team).deliver

这是rspec的工厂

before :each do
  subject = Factory(:ticket, action_type: 'name_change', team_name: 'test123')
end

然后是模型中围绕电子邮件发送位置的代码

Factory.define :ticket do |ticket|
  team = nil
  ticket.team { team = Factory(:team) }
  ticket.creator { team.captain }
  ticket.subject { Factory(:team_assignment, team: team, user: Factory(:active_user)).user }
end

我已经尝试直接输入与邮件有关的所有内容,只是为了确保没有问题。如果您需要更多型号或实际邮件,请告诉我。我真的无法弄清楚这在哪里死。我唯一的结论是它只是旧版本的aws sdk和rspec宝石的一个错误。我甚至尝试用更新的版本替换aws-sdk,但仍然没有成功获得其他任何工作。

1 个答案:

答案 0 :(得分:0)

问题是您正在设置config.action_mailer.perform_deliveries = false,因此不会进行任何投放,因此ActionMailer::Base.deliveries将始终为空集合。

如果您要测试电子邮件递送,请设置config.action_mailer.perform_deliveries = true并使用拦截器确保您不向用户发送电子邮件。

lass SandboxEmailInterceptor
  def self.delivering_email(message)
    recipients =
      if Rails.env.test?
        [
          "user@example.com"
        ]
      end

    message.to = recipients
    message.cc = []
  end
end

unless Rails.env.production? || Rails.env.test?
  ActionMailer::Base.register_interceptor(SandboxEmailInterceptor)
end