Ruby on rails Can';t检验使用延迟作业时是否调用了方法';延迟';方法
我使用Mocha、Test::Unit和delayed_作业,希望测试是否执行了mailer方法,如下所示:Ruby on rails Can';t检验使用延迟作业时是否调用了方法';延迟';方法,ruby-on-rails,delayed-job,mocha.js,testunit,Ruby On Rails,Delayed Job,Mocha.js,Testunit,我使用Mocha、Test::Unit和delayed_作业,希望测试是否执行了mailer方法,如下所示: test "should send info about paid payment" do payment = Payment.new :contractor_name => "notempty", :address => "notempty" UserMailer.expects(:send_payment_info) payment.set
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:nil类的未定义方法deliver
app/models/payment.rb:33:in
set_payment!'
测试/单位/付款测试。rb:50:在“测试”中,你应该发送关于付款的信息
我不知道怎么解决这个问题?也许我应该以不同的方式使用moch UserMailer?这种解决方法有助于:
UserMailer.stubs(:delay).returns UserMailer
UserMailer.expects(:send_payment_info)
我不知道这是不是合法的方式,但它是有效的