我最近切换了一个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,但仍然没有成功获得其他任何工作。
答案 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