ruby-on-rails - 无法测试使用 delayed_job 'delay' 方法时是否调用了方法

标签 ruby-on-rails delayed-job mocha.js testunit

我使用了 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:inset_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/

相关文章:

ruby-on-rails - Ruby on Rails 创建方法失败时,渲染会丢失局部变量

ruby-on-rails - Rspec Controller 基础测试

ruby-on-rails - 如何使用延迟作业在 Rails 中执行异步任务?

javascript - 我的函数中未调用异步 Mocha 完成()

javascript - 如何在使用 nodejs 和 babel 进行集成测试时 stub 导入模块中的函数

ruby-on-rails - 守卫为什么要停下来?

ruby-on-rails - "class << self"在 Rails 中是什么意思?

mysql - MySQL 上的延迟作业 : 'This version of MySQL doesn' t yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

ruby-on-rails - 在 GitLab 中发送新用户通知的问题

node.js - "Failed to get configuration"通过 Node 在 Mocha 测试中使用 Wolkenkit 客户端