使用TimeCop进行Sidetiq测试

时间:2014-03-25 18:01:13

标签: ruby-on-rails sidekiq timecop sidetiq

我试图为使用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

再次感谢您的帮助。

1 个答案:

答案 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堆栈获取我想要在测试中看到的行为的最好方法。