我试图为使用Sidetiq的Sidekiq工作编写一些测试,但我似乎无法让它工作。我在sidetiq repo上发现了一个处理这个问题的问题,但是没有人回答它,所以我想我可以把它带到stackoverflow来获得一些答案和清晰度。
以下是问题的链接:https://github.com/tobiassvn/sidetiq/issues/72
这里的代码似乎无法发挥作用:
spec.rb
# sat 1st feb
Timecop.travel Time.local(2014, 2, 1, 1, 1, 1) do
sign_up_and_onboard user[:email], user[:password]
# sunday 2nd feb, 8pm
Timecop.travel Time.local(2014, 2, 2, 20, 1, 1) do
puts 'should have fired'
end
end
worker.rb
recurrence { weekly.day(:sunday).hour_of_day(8) }
def perform
puts 'test'
end
再次感谢您的帮助。
答案 0 :(得分:1)
看起来 - 从您发布的代码中 - 好像什么都没有实际解雇您的员工。目前还不清楚你的signup_and_onboard方法做了什么 - 也许是解雇了它们。
我建议使用sidekiq / testing(请参阅https://github.com/mperham/sidekiq/wiki/Testing),然后使用以下内容通过Sidetiq处理程序解雇您的工作人员:
Sidekiq::Testing.inline! do
expect(
Sidetiq::Handler.new.dispatch(MyWorker, Time.now)
).to be_truthy
end
在Timecop区块内。
这是我通过检查Sidetiq代码库来解决工作人员通过足够的Sidetiq堆栈获取我想要在测试中看到的行为的最好方法。