我想测试一些 resque 工人,以及与这些工人一起排队工作的行为。我正在使用 rspec 和 rails。
目前我有一个模型,我们称之为 Article.rb,它有一个名为 updates_related_categories 的 before_save 方法,用于检查是否需要将具有 CategoriesSorter 的作业加入队列。如果是这样,它会使用与该文章相关的类别 id 的参数将该工作排入队列。
然而,在测试中,这些作业被发送到与开发服务器发送作业相同的队列中。(我使用 resque 服务器进行检查,您可以在 root/redis/overview 中绑定到您的服务器)
我想知道:
1) 如何将测试作业发送到与开发作业不同的队列?
如果这是可能的,也欢迎任何其他关于测试 resque 的建议。
我已经看到一些相关的问题,建议使用 resque-unit 和 resque-spec,但这些问题还很不成熟,我无法让它们进入有用的工作状态。另外,我听说过使用 Resque.inline 但我不知道这在这种情况下是否相关,因为在测试规范中没有调用 resque,它是在保存测试中创建的对象的文章模型中调用的。
示例代码:
文章.rb:
before_save :update_related_categories
def update_related_categories
#some if statements/checks to see if a related category needs updating
Resque.enqueue(CategoriesWorker, [category_id])
end
end
分类排序器:
class CategoriesSorter
@queue=:sorting_queue
def self.perform(ids)
ids.each do |id|
#some code
end
end
end
眼镜:
it "should do something" do
@article = #set something to enqueue a job
@article.save
#can i check if a job is enqueued? can i send this job NOT to the development queue but a different one?
end