gpt4 book ai didi

ruby-on-rails - 测试 Resque 时如何区分测试队列和真实队列(使用 rspec 和 rails?)

转载 作者:行者123 更新时间:2023-12-04 06:14:48 25 4
gpt4 key购买 nike

我想测试一些 resque 工作人员,以及将工作与这些工作人员一起排队的操作。我正在使用 rspec 和 rails。

目前我有一个模型,我们称之为 Article.rb,它有一个名为 updates_related_categories 的 before_save 方法,用于检查是否需要将具有 CategoriesSorter 的作业加入队列。如果是这样,它将与该工作人员一起排队工作,并使用与文章相关的类别 id 的参数。

然而,在测试中,这些作业被发送到与开发服务器发送作业相同的队列中。 (我使用 resque 服务器进行检查,您可以在 root/redis/overview 中绑定(bind)到您的服务器)

我想知道:

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

最佳答案

在我看来,您不想测试将作业入队是否会导致调用执行 - 我们相信 Resque 会做它应该做的事情。但是,您可以测试 1. 调用 update_related_categories 将作业排入队列。然后,您可以单独测试 2. 调用 perform 的工作人员是否会产生所需的行为。

对于一般的 Resque 测试,结合 resque-spec 和模拟 worker 可以实现上述两个目标。

对于1,使用resque-spec,你可以模拟一个worker在你的类上调用perform方法,然后检查它是否已经正确入队:

describe "Calling update_related_categories " do
before(:each) do
ResqueSpec.reset!
end

it "should enqueue the job" do
Article.update_related_categories
CategoriesSorter.should have_queue_size_of(1)
end
end

对于 2,您可以创建一个 Job(并指定一个与开发队列不同的队列名称)、一个 Resque::Worker,然后将 Worker 分配给 Job:

def run_worker_simulation
# see Resque::Job api for setting the args you want
Resque::Job.create('test_queue_name', 'class_name', 'type', 'id')

worker = Resque::Worker.new('test_queue_name')
worker.very_verbose = true

job = worker.reserve
worker.perform(job)
end

希望能给你一些想法。

关于ruby-on-rails - 测试 Resque 时如何区分测试队列和真实队列(使用 rspec 和 rails?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com