Ruby on rails rspec sidekiq:如何测试;在“sidekiq”重试“U用尽”区块内;使用另一个类方法

Ruby on rails rspec sidekiq:如何测试;在“sidekiq”重试“U用尽”区块内;使用另一个类方法,ruby-on-rails,rspec,sidekiq,rspec-sidekiq,Ruby On Rails,Rspec,Sidekiq,Rspec Sidekiq,我使用gem“rspec sidekiq”来测试“sidekiq重试” 这是我的工人: class PostListingsWorker include Sidekiq::Worker sidekiq_options :retry => 0 sidekiq_retries_exhausted do |msg| NotifyMailer.warn_email(msg).deliver_now end def perform(params, fetch_time

我使用gem“rspec sidekiq”来测试“sidekiq重试”

这是我的工人:

class PostListingsWorker
  include Sidekiq::Worker
  sidekiq_options :retry => 0

  sidekiq_retries_exhausted do |msg|
    NotifyMailer.warn_email(msg).deliver_now
  end

  def perform(params, fetch_time)
  ....
  end
end
这是来自“rspec sidekiq”github的一个示例:

我认为应该将“sidekiq_retries_detained”块中的输入方法作为符号输入到测试中。 我是这样做的,但不起作用

这是我的测试。请看receive()方法:

这是我的日志:

Failure/Error: expect(PostListingsWorker).to > >
receive(:"NotifyMailer.warn_email().deliver_now").with(:msg)
PostListingsWorker does not implement: NotifyMailer.warn_email().deliver_now
那么,在“sidekiq\u重试”期间,有没有办法测试属于另一个类的方法?
也许能找到某种方法以symblo的形式发送方法?

你很接近了。但是,您可以简单地针对
NotifyMailer
编写您的期望,如下所示:

email = double('email')
msg = double('msg')

PostListingsWorker.within_sidekiq_retries_exhausted_block(msg) {
  expect(NotifyMailer).to receive(:warn_email).with(msg).and_return(email)
  expect(email).to receive(:deliver_now)
}

这是唯一的测试方法吗?
Failure/Error: expect(PostListingsWorker).to > >
receive(:"NotifyMailer.warn_email().deliver_now").with(:msg)
PostListingsWorker does not implement: NotifyMailer.warn_email().deliver_now
email = double('email')
msg = double('msg')

PostListingsWorker.within_sidekiq_retries_exhausted_block(msg) {
  expect(NotifyMailer).to receive(:warn_email).with(msg).and_return(email)
  expect(email).to receive(:deliver_now)
}