いくつかの状況で電子メールを送信するRailsアプリケーションをテストしました。それはAPIです。電子メールをテストする際に、Railsの自動クリーニングクラス変数を防ぐ方法はありますか?
私はAirborne gemを使用しています。これはAPIテストを非常に簡単にします。私は電子メール配信をテストしなければならない時を除いて、すべて正しいものでした。私は、次のことを試してみました:
it "blah" do
//Code that makes my API send an email
puts ActionMailer::Base.deliveries.inspect
end
しかしdeliveries
配列は常に空です。私もEmails.deliveries.inspect
で試しました。メールはActionMailer::Base
を継承したカスタムメーラーです。
私はActionMailerのAPIドキュメントを読み終え、インターセプタコンセプトを満たしました。インターセプタは:test
で動作しませんので、:smtp
に切り替えました。実際、電子メールは正しく送信されていますが、期待通りのテストではアクセスできません。
私のインターセプタコードは今、この権利
initializers/email_interceptor.rb
class EmailInterceptor
@@msgs = []
def self.delivering_email(message)
puts message
//Rails.logger.debug "Email being sent: " + message.to_s
@@msgs << message
Rails.logger.debug "Actual messages array: #{@@msgs}"
end
def self.msgs
@@msgs
end
end
ActionMailer::Base.register_interceptor(EmailInterceptor)
すべてOKです。デバッグメッセージは配列が正しく表示されるように表示します。しかし、変数は私のテストステートメントが実行される前に消去されます。 EDIT:テストスイートを実行すると、上記のコードが実行されます。しかし変数はテスト自体からアクセスされていません。
//test code
puts EmailInterceptor.msgs.inspect
=> []
この現象を防止する方法はありますか?
あなたは 'Rails.logger.debug 'を意味しましたか?実際のメッセージ配列:#{@@ msgs}" '? –
はい、申し訳ありません。一定。 –