使用RSpec测试SuckerPunch :: Job

时间:2014-02-27 14:43:27

标签: rspec sucker-punch

我已经定义了以下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的实例?我已经阅读了Celluloid wiki中描述的Gotchas,但#wrapped_object方法不再存在。

1 个答案:

答案 0 :(得分: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