最近、私はamazon ses経由でメールを送信するようにレールアプリを切り替えました。テストamazon sesメール送信を使用しているときにRspecテストが失敗する
config.action_mailer.delivery_method = :test
:
TypeError: can't convert Fixnum into String # (eval):3:in 'send_raw_email'
は私が適切に設定されたテスト環境のメール設定を持っています。メールの送信は、しかし、テストは次のエラーでメールアイテムの周りに失敗し、正常に動作します電子メールを送信しないことでエラーが発生するのを防ぐことができますが、配信されていないメールについてはエラーが発生します。何が起こっているかの
rails (3.2.12)
rspec (2.8.0)
cucumber (2.3.3)
aws-sdk (1.33.0)
任意の提案、またはどのようにこの問題を回避するには:
config.action_mailer.perform_deliveries = false
should_change -> { ActionMailer::Base.deliveries.size } do
result should have changed, but is still 0
宝石のバージョンは以下の通りです。他の情報が必要な場合は、私に知らせてください。これは、amazon sesを使用するメールの送信を切り替える前にうまくいきました。
EDIT:
失敗しているテストは、電子メールを含むその全てが
BlahMailer.send_invite(team).deliver
これは、モデル内にあるとコントローラを.deliver使用して送信されているテストはわずかに関連した経路を呼び出しますモデル内の関連する関数を呼び出すことができます。エラーは、ses関数であるsend_raw_emailから来ていることを示しているため、表示する内容はわかりません。アプリケーションのコードは表示されません。
EDIT 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の古いバージョンのバグです。私もaws-sdkを新しいバージョンに置き換えようとしましたが、他のものを稼働させるのにはまだ失敗しました。
誰でも手助けするコードが必要です。 [編集](http://stackoverflow.com/posts/37216571/edit)あなたの質問は、テストしているメソッドと失敗しているテストの両方を含めることができます。 –
すべてのコールがやっているので、私があなたに見せてくれるものが何であるかはっきりしません.deliverをやっていて、deliver_methodをamazon_sesに変更する前に働いていました。これはaws-sdk宝石の問題かもしれませんか? – Mentch
この場合、「チーム」とは何ですか?より多くのコード・コンテキストを含めると便利です。 –