我使用了 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
如果不使用延迟方法,测试会按预期工作,但有了它(我有 Delayed::Worker.delay_jobs = !Rails.env.test? 在初始化配置中)我得到:
NoMethodError: undefined method
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'
我不知道如何解决这个问题?也许我应该以不同的方式 moch UserMailer?
最佳答案
这样的变通办法帮助:
UserMailer.stubs(:delay).returns UserMailer
UserMailer.expects(:send_payment_info)
不知道是不是正确的方法,但确实有效
关于ruby-on-rails - 无法测试使用 delayed_job 'delay' 方法时是否调用了方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788867/