gpt4 book ai didi

ruby-on-rails - 期望同一个类的多个 Rails Active Job 使用不同的参数入队

转载 作者:行者123 更新时间:2023-12-04 11:26:52 25 4
gpt4 key购买 nike

我有一个 Rails Active Job,它创建了多个具有不同参数的相同类型的其他作业。我想测试这个作业是否使用正确的参数将另一个作业排入队列。

这基本上就是我想要实现的目标:

require 'rails_helper'

RSpec.describe TriggerJob, type: :job do
include ActiveJob::TestHelper

after do
clear_enqueued_jobs
end

it 'enqueues jobs for all model instances' do
model1 = create(:model)
model2 = create(:model)
model3 = create(:model)

expect { described_class.perform_now }
.to(have_enqueued_job(ModelJob).with { |arg| expect(arg.id).to be == model1.id }.exactly(:once))
.and(have_enqueued_job(ModelJob).with { |arg| expect(arg.id).to be == model2.id }.exactly(:once))
.and(have_enqueued_job(ModelJob).with { |arg| expect(arg.id).to be == model3.id }.exactly(:once))
end
end

这不起作用,因为 RSpec 似乎只是匹配作业类类型,然后尝试将第一个作业参数与我的块进行比较。根据队列中的顺序,这会失败。我希望 RSpec 匹配任何排队的 ModelJob 作业,并且只有在队列中找不到任何匹配项时才会失败。

此外,我想测试是否不存在其他具有不同参数的 ModelJob 作业,但这并不是真正必需的。

最佳答案

# ...
it 'schedules jobs with different arguments' do
described_class.perform_now

expect(ModelJob)
.to(have_been_enqueued.at_least(:once)
.with(model1.id)

expect(ModelJob)
.to(have_been_enqueued.at_least(:once)
.with(model2.id)

expect(ModelJob)
.to(have_been_enqueued.at_least(:once)
.with(model3.id)


end

关于ruby-on-rails - 期望同一个类的多个 Rails Active Job 使用不同的参数入队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61477317/

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