0

我已经定义了以下 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?我已经阅读了赛璐珞维基中描述的陷阱#wrapped_object,但该方法不存在(不再存在)。

4

1 回答 1

1

如果您查看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是类似的实例方法new,但没有调用initialize.

于 2014-02-27T16:26:05.050 回答