Как построить спецификацию для ожидающего работника - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь создать спецификацию для этого звонка (простая работа):

SomeJob.set(wait: 3.seconds).perform_later(messenger.id, EVENT)

Спецификация, которая у меня есть на данный момент:

it 'should call an event for...' do
  expect(SomeJob).to receive(:set).with(wait: 3.seconds).and_call_original
  subject.save
end

И он работает нормально, но я также хочу проверить, что он вызывает perform_later через 3 секунды.Как правильно это сделать?

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете использовать ActiveJob::TestHelper и ActiveSupport::Testing::TimeHelpers.

Добавить помощника к rails_helper.rb.

  config.include ActiveJob::TestHelper
  config.include ActiveSupport::Testing::TimeHelpers

Добавить тест к спецификации.

class Some < ApplicationRecord
  def hello
    SomeJob.set(wait: 3.seconds).perform_later 'Hello!'
  end
end
RSpec.describe Some, type: :model do
  it 'should start job after 3 seconds' do
    time = Time.current
    travel_to(time) do
      assertion = {
        job: SomeJob,
        args: ['Hello!'],
        at: (time + 3.seconds).to_i
      }
      assert_enqueued_with(assertion) { Some.new.hello }
    end
  end
end
...