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).

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top