私はMocha、Test :: Unit、delayed_jobを使用しており、次のようにメーラーメソッドが実行されているかどうかをテストしたいと考えています。
test "should send info about paid payment" do
payment = Payment.new :contractor_name => "notempty", :address => "notempty"
UserMailer.expects(:send_payment_info)
payment.set_paid!
end
# model method
def set_paid!
self.status = 'paid'
self.paid_at = Date.today
self.save!
UserMailer.delay.send_payment_info self
end
遅延メソッドを使用しなくても、テストは期待どおりに機能しますが、それを使用すると(初期化設定で、Delayed :: Worker.delay_jobs =!Rails.env.test?)、次のようになります。
NoMethodError:未定義のメソッド
deliver' for nil:NilClass app/models/payment.rb:33:in
set_paid! ' test / unit /payment_test.rb:50:in `test_should_send_info_about_paid_payment '
そして、私はこれを修正する方法がわかりませんか?たぶん私はUserMailerを別の方法でモックする必要がありますか?