Использование RSpec для тестирования SuckerPunch::Job

StackOverflow https://stackoverflow.com//questions/22071811

  •  23-12-2019
  •  | 
  •  

Вопрос

Я определил следующее задание SuckerPunch:

class MyWorker
  include SuckerPunch::Job

  def perform(account)
    @account = account
  end

  def params
    @account
  end
end

И я хочу протестировать это с помощью RSpec:

describe MyWorker do
  before { subject.perform("test@mail.nl") }

  its(:params) { should eq "test@mail.nl" }
end

Это отлично работает при тестировании без include SuckerPunch::Job.Вероятно, потому, что тема относится к экземпляру ActorProxy вместо MyWorker.

Как мне проверить MyWorker?Или как мне получить доступ к экземпляру MyWorker?Я прочитал Ошибки описано в вики Celluloid, но #wrapped_object метод не существует (больше).

Это было полезно?

Решение

Если вы посмотрите на https://github.com/brandonhilkert/sucker_punch/blob/master/lib/sucker_punch/job.rb, ты это увидишь MyWorker.new действительно переопределяется, чтобы возвращать что-то иное, чем экземпляр MyWorker сорт.На самом деле это Celluloid::PoolManager.

В любом случае, если вы хотите получить доступ к params метод экземпляра, определенный внутри MyWorker, ты можешь allocate экземпляр класса следующим образом:

describe MyWorker do
  subject { MyWorker.allocate }
  before { subject.perform("test@mail.nl") }

  its(:params) { should eq "test@mail.nl" }
end

allocate является методом экземпляра Class как new, но без вызова initialize.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top