El uso de RSpec para probar SuckerPunch::Trabajo
-
23-12-2019 - |
Pregunta
He definido los siguientes SuckerPunch Trabajo:
class MyWorker
include SuckerPunch::Job
def perform(account)
@account = account
end
def params
@account
end
end
Y quiero probarlo usando RSpec:
describe MyWorker do
before { subject.perform("test@mail.nl") }
its(:params) { should eq "test@mail.nl" }
end
Esto funciona bien cuando se prueba sin include SuckerPunch::Job
.Probablemente debido a que el tema se refiere a una instancia de ActorProxy
en lugar de MyWorker
.
¿Cómo debo probar MyWorker
?O ¿cómo debo acceder a la instancia de MyWorker
?He leído el Trampas se describe en el Celuloide de la wiki, pero la #wrapped_object
método no existir (ya).
Solución
Si usted mira en https://github.com/brandonhilkert/sucker_punch/blob/master/lib/sucker_punch/job.rb, verás que MyWorker.new
es de hecho cada vez redefinido para devolver algo distinto a una instancia de la MyWorker
clase.En realidad es una Celluloid::PoolManager
.
De todos modos, si quieres acceder a la params
método de instancia definidas dentro de MyWorker
, puede allocate
una instancia de la clase, de la siguiente manera:
describe MyWorker do
subject { MyWorker.allocate }
before { subject.perform("test@mail.nl") }
its(:params) { should eq "test@mail.nl" }
end
allocate
es un método de instancia de Class
es como new
, pero sin la llamada a initialize
.