rspec для Delayed_job

Я пытаюсь написать rspec для отложенной работы.

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

class IncomingMailsController < ApplicationController
...
MailingJob.new(@incoming_mail.id).perform
...
end

Затем в /lib/mailing_job.rb:

class MailingJob < Struct.new(:mailing_id)
  def perform
  .......

Как я могу проверить это с помощью rspec? Прямо сейчас у меня есть:

/spec/lib/mailing_job/mailingjob_spec.rb

require 'spec_helper'

describe MailingJob do

  include DelayedJobSpecHelper

  it "should have been worked on if I do something that queues jobs" do
    @incoming_mail = IncomingMail.create(.........)
    MailingJob.new(@incoming_mail.id).perform
    #IncomingMail.method_that_queues_jobs
    work_off
    MailingJob.should be_worked_on
  end
end

/spec/lib/delayed_job_spec_helper.rb

module DelayedJobSpecHelper
  # http://erikonrails.snowedin.net/?p=230
  def work_off
    Delayed::Job.all.each do |job|
      job.payload_object.perform
      job.destroy
    end
  end
end

Но это ошибки с:

 1) MailingJob should have been worked on if I do something that queues jobs
     Failure/Error: MailingJob.should be_worked_on
     NoMethodError:
       undefined method `worked_on?' for MailingJob:Class
     # ./spec/lib/mailing_job/mailingjob_spec.rb:19

Идеи? Спасибо

1 ответ

Решение

Вы неправильно ставите свою очередь в диспетчере. perform вызывается работником, а не вами.

Delayed::Job.enqueue MailingJob.new(@incoming_mail.id)

Точно так же не звоните perform в вашей спецификации, вот что work_off делает.

Структура спецификации должна быть такой:

  • Метод контроллера доступа, который ставит в очередь задание
  • Скажите DelayedJob отработать очередь
  • Убедитесь, что он сделал то, что должен был сделать

Я не уверен где be_worked_on приходит, как worked_on? не определено нигде в DelayedJob (и действительно, является причиной вашей ошибки). Вместо этого я бы проверил, что-то было сделано, например, отправлено письмо или что-то еще, что ваша работа должна делать.

Другие вопросы по тегам