Каков наилучший способ проверки цепочек delayed_job с помощью rSpec? - PullRequest
12 голосов
/ 11 августа 2011

В настоящее время, когда у меня есть отложенный метод в моем коде, как показано ниже:

CommentMailer.delay.deliver_comments(@comment, true)

Я пишу что-то вроде этого в моей спецификации:

dj = mock("DelayProxy")
CommentMailer.should_receive(:delay).and_return(dj)
dj.should_receive(:deliver_comments).with(comment, true)

Есть ли лучший способ обработать этот и / или цепочечные методы, подобные этому, в rSpec в целом?

Ответы [ 3 ]

27 голосов
/ 16 апреля 2012

Мы можем просто добавить еще одну строку в блоке перед следующим образом:

CommentMailer.stub(:delay).and_return(CommentMailer)

Тогда вы можете выполнить обычную проверку на ложность следующим образом:

CommentMailer.should_receive(:deliver_comments).with(comment, true)
2 голосов
/ 21 сентября 2011

Вот некоторые обсуждения о методах сцепления в rSpec, которые я нашел полезными:

Методы оцепления с Rspec

http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0#

0 голосов
/ 14 июля 2017
describe '#perform' do
    subject do
      Delayed::Worker.delay_jobs = false
      proc { worker.perform() }
    end

    it { is_expected.to change { ActionMailer::Base.deliveries.length }.by(2) }
  end

Установите отложенное задание как ложное, и вы можете проверить его как простое

...