質問

次の吸い抜きジョブを定義しました:

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のインスタンスにアクセスするにはどうすればよいですか。 gotchas はセルロイドWikiで説明されていますが、#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
.

allocateClassのインスタンスメソッドです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top