3

私は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:inset_paid! ' test / unit /payment_test.rb:50:in `test_should_send_info_about_paid_payment '

そして、私はこれを修正する方法がわかりませんか?たぶん私はUserMailerを別の方法でモックする必要がありますか?

4

1 に答える 1

5

このような回避策は次のことに役立ちました。

UserMailer.stubs(:delay).returns UserMailer
UserMailer.expects(:send_payment_info)

それが合法的な方法かどうかはわかりませんが、機能します

于 2012-12-14T16:21:17.067 に答える