2016-07-04 17 views
0

私はActionMailerのカスタム配信メソッドを使用して電子メールを送信するrspecテストを作成しようとしています。rspecテストからカスタムアクションメーラー配信メソッドが呼び出されない

マイカスタム配信方法の実装:

class MyCustomDeliveryMethod 

    def deliver!(message) 
    puts 'Custom deliver for message: ' + message.to_s 
    ... 
    end 

RSpecのコード:私は 'カスタム届ける' という文字列を見ることはありませんしかし

it "should send an email" do 
    WebMock.allow_net_connect! 
    ActionMailer::Base.add_delivery_method(:api, MyCustomDeliveryMethod) 
    ActionMailer::Base.perform_deliveries = true 

    puts 'expecting this to call my custom delivery method' 

    ActionMailer::Base.mail(:to => '[email protected]', 
    :subject => 'here is a test subject sent by ActionMailer', 
    :body => 'here is a test body sent by <i>ActionMailer</i>', 
    :delivery_method => :api 
) 

end 

test.rb

config.action_mailer.delivery_method = :api 

。私の他のテストでは、クラスの他のメソッドをうまく使っています。それは単にdeliver()メソッドを起動しても機能しません。私は何が欠けていますか?

(注意:rspecでActionMailerをテストするいくつかの例がありますが、私の望むものではないメーラーの動作を嘲笑しているように見えます。

+0

あなたの 'MyCustomMailer'メーラーは、standart' ActionMailer :: Base'から継承する必要がありますか? – Aleksey

答えて

0

が最後にそこに着きました。 2つの欠落がありました。

カスタム配信クラスでは、1つのパラメータを取る初期化メソッドを定義する必要があります。例えば

def initialize(it) 
end 

は、あなたはそれをトリガーするために取得する.deliver_nowメールに必要なので、完全な呼び出し元のコードは、例えばあります

it "should send an email" do 
    WebMock.allow_net_connect! 
    ActionMailer::Base.add_delivery_method(:api, MyCustomDeliveryMethod) 
    ActionMailer::Base.perform_deliveries = true 

    puts 'expecting this to call my custom delivery method' 

    ActionMailer::Base.mail(:to => '[email protected]', 
    :subject => 'here is a test subject sent by ActionMailer', 
    :body => 'here is a test body sent by <i>ActionMailer</i>', 
    :delivery_method => :api 
).deliver_now 

end 
1

私は確信していませんが、あなたのMyCustomMailerクラスがActionMailer::Baseから継承されていないという問題があると思います。 ここでApplicationMailerは、ActionMailer::Baseから継承され、いくつかのデフォルト値を設定するために使用されます。

実際のメーラクラスUserMailerApplicationMailerから継承されています。あなたが余分なクラスをスキップして直接継承することができます好きなら
は、すなわち

class MyCustomMailer < ActionMailer::Base 
    ... 
end 
+0

申し訳ありませんが、カスタムのメーラーではなくカスタム配信方法であることを明確にするためにコメントを更新しました。 –

関連する問題