如何用黄瓜测试sidekiq

时间:2013-05-28 14:58:02

标签: ruby-on-rails cucumber sidekiq

我有一个方法可以启动两个不同的Sidekiq工作人员 - 一个发送电子邮件,一个发布到Faye频道到前端。我试图测试黄瓜功能中的行为。该代码在开发中运行良好。

我已在require 'sidekiq/testing/inline'中加入features/support/env.rb,以便我可以查看工作人员工作的实际结果。电子邮件的测试工作正常(使用Spreewald电子邮件步骤),但我看不到任何其他工作人员已被执行的证据。我已经包含了' logger.debug'工人中的陈述但它们没有出现在log/test.log中 - 我还应该看看其他地方吗?

工作人员似乎不太可能正在运行,但前端似乎没有收到Faye消息。有关如何调试它的任何建议都将受到欢迎。

2 个答案:

答案 0 :(得分:3)

通过在support/env.rb中添加适当的require语句,我能够在黄瓜测试中运行我的Sidekiq工作人员:

require 'sidekiq/testing'

如果使用Spork,请将它放在prefork块中:

Spork.prefork do
  # ...
  require 'sidekiq/testing'
  # ...

然后我写了一个看起来像这样的功能:

When I submit the form that adds jobs to the queue
Then I should see "Your jobs were added to the queue."
When I wait for the jobs to finish
And I refresh the page
Then the completed jobs are listed on the page

然后我手动排空队列:

When(/^I wait for the jobs to finish$/) do
  MySpecialWorker.drain
end

您还可以通过在require语句之后将Sidekiq::Testing.inline!添加到support/env.rb来使所有作业内联运行,但由于我只想运行这些作业,因此我选择仅手动运行那些我关心的。

答案 1 :(得分:0)

有时候,我们需要使用Sidekiq::Testing.fake!模式的任何测试用例进行测试。 在我们的项目中,我们已经使用RSpec挂钩方法来制作它。按照下面的代码,您可以看到: 在文件features/support/capybara.rb

Around('@sidekiq_job') do |_scenario, block|
  Sidekiq::Testing.fake! do
    block.call
  end
end

这是此配置的示例:

@sidekiq_job
Scenario: Your scenario
Given ...
And ...
When ...
Then the demo should be enqueued

还有

Then /^the demo employee should be enqueued$/ do
  expect(YourWorker.jobs.size).to eq(1)
end