Verwenden von RSpec zum Testen von SuckerPunch::Job
-
23-12-2019 - |
Frage
Ich habe den folgenden SuckerPunch-Job definiert:
class MyWorker
include SuckerPunch::Job
def perform(account)
@account = account
end
def params
@account
end
end
Und ich möchte es mit RSpec testen:
describe MyWorker do
before { subject.perform("test@mail.nl") }
its(:params) { should eq "test@mail.nl" }
end
Dies funktioniert gut, wenn man ohne testet include SuckerPunch::Job
.Wahrscheinlich, weil sich das Thema auf eine Instanz von bezieht ActorProxy
anstatt MyWorker
.
Wie soll ich testen MyWorker
?Oder wie soll ich Zugriff auf die Instanz von bekommen MyWorker
?Ich habe das gelesen Fallstricke beschrieben im Celluloid-Wiki, aber das #wrapped_object
Methode existiert nicht (mehr).
Lösung
Wenn man hinschaut https://github.com/brandonhilkert/sucker_punch/blob/master/lib/sucker_punch/job.rb, das wirst du sehen MyWorker.new
wird tatsächlich neu definiert, um etwas anderes als eine Instanz von zurückzugeben MyWorker
Klasse.Es ist tatsächlich ein Celluloid::PoolManager
.
Wie auch immer, wenn Sie darauf zugreifen möchten params
Instanzmethode, die darin definiert ist MyWorker
, du kannst allocate
eine Instanz der Klasse, wie folgt:
describe MyWorker do
subject { MyWorker.allocate }
before { subject.perform("test@mail.nl") }
its(:params) { should eq "test@mail.nl" }
end
allocate
ist eine Instanzmethode von Class
ist wie new
, aber ohne den Aufruf zu initialize
.