使用delayed_job'delay'方法时无法测试方法是否被调用

Grz*_*orz 3 ruby-on-rails mocha.js testunit delayed-job

我使用Mocha,Test :: Unit和delayed_job来测试是否已经执行了mailer方法,如下所示:

  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
Run Code Online (Sandbox Code Playgroud)

不使用延迟方法测试按预期工作,但有了它(我在初始化器配置中有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?

Grz*_*orz 5

这种解决方法有助于:

UserMailer.stubs(:delay).returns UserMailer
UserMailer.expects(:send_payment_info)
Run Code Online (Sandbox Code Playgroud)

不知道这是否合法,但它确实有效