我有一个方法可以启动两个不同的Sidekiq工作人员 - 一个发送电子邮件,一个发布到Faye频道到前端。我试图测试黄瓜功能中的行为。该代码在开发中运行良好。
我已在require 'sidekiq/testing/inline'
中加入features/support/env.rb
,以便我可以查看工作人员工作的实际结果。电子邮件的测试工作正常(使用Spreewald电子邮件步骤),但我看不到任何其他工作人员已被执行的证据。我已经包含了' logger.debug'工人中的陈述但它们没有出现在log/test.log
中 - 我还应该看看其他地方吗?
工作人员似乎不太可能正在运行,但前端似乎没有收到Faye消息。有关如何调试它的任何建议都将受到欢迎。
答案 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