1

我正在尝试为使用 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

再次感谢你的帮助。

4

1 回答 1

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 堆栈来触发工作人员以获得我想在测试中看到的行为。

于 2014-07-23T11:41:23.037 回答