Использование RSpec для тестирования SuckerPunch::Job
-
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
.