【发布时间】:2016-05-13 18:02:39
【问题描述】:
我最近切换了一个 rails 应用程序来通过 amazon ses 发送邮件。邮件的发送工作正常,但是围绕邮件项目的测试失败并出现以下错误:
TypeError:
can't convert Fixnum into String
# (eval):3:in 'send_raw_email'
我已将测试环境邮件设置正确设置为 :test
config.action_mailer.delivery_method = :test
我可以通过不发送电子邮件来防止错误发生,但随后我收到有关邮件未送达的错误。
config.action_mailer.perform_deliveries = false
should_change -> { ActionMailer::Base.deliveries.size } do
result should have changed, but is still 0
宝石版本如下:
rails (3.2.12)
rspec (2.8.0)
cucumber (2.3.3)
aws-sdk (1.33.0)
关于正在发生的事情或如何解决此问题的任何建议。如果需要任何其他信息,请告诉我。在我将邮件发送切换为使用亚马逊 ses 之前,这很好用。
编辑:
失败的测试都涉及使用 .deliver 发送的电子邮件
BlahMailer.send_invite(team).deliver
这是在模型和控制器内部,测试只是调用控制器中的关联路由或调用模型中的关联函数。不知道还要显示什么,因为错误显示它来自 send_raw_email 是 ses 函数,而不是来自应用程序的任何代码。
编辑 2:更多代码
这是其中一项测试,在此示例中,它为模型和每个测试设置工厂。
before :each do
subject = Factory(:ticket, action_type: 'name_change', team_name: 'test123')
end
这是rspec中的工厂
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
然后这里是模型中围绕电子邮件发送位置的代码
%w(requested approved cancelled accepted).each do |state|
define_method "notify_#{state}" do
TicketMailer.send("#{action_type}_#{state}", self).deliver
end
end
我已经尝试为基本上与邮件有关的所有内容添加纯文本,以确保没有问题。如果您需要模型或实际邮件,请告诉我。我真的不知道这是死在哪里。我唯一的结论是它只是旧版本的 aws sdk 和 rspec gem 的一个错误。我什至尝试用较新的版本替换 aws-sdk,但仍然无法让其他任何东西正常工作。
【问题讨论】:
-
您需要显示更多代码以供任何人帮助。 Edit 你的问题包括你正在测试的方法和失败的测试。
-
添加了更多,不确定我还能向您展示什么,因为所有调用都在做 .deliver 并且在我将 Deliver_method 更改为 :amazon_ses 之前工作。这可能是 aws-sdk gem 的问题吗?
-
在这种情况下
team是什么?包含更多代码上下文会很有帮助。 -
团队中有什么重要的?这只是一个例子。我认为此时我将删除测试,因为发送亚马逊 ses 电子邮件会破坏 rspec。
-
抱歉,如果需要,我已经添加了更多代码以提供帮助,如果提供其他任何内容有帮助,请告诉我。
标签: ruby-on-rails rspec