我已经定义了以下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
方法不再存在。
答案 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
allocate
是Class
的实例方法,与new
类似,但没有调用initialize
。