gpt4 book ai didi

ruby-on-rails - 如何测试 ActiveJob 是否已入队?

转载 作者:行者123 更新时间:2023-12-02 06:14:35 31 4
gpt4 key购买 nike

如果成功保存记录,我有一个调用 ActiveJob 的创建操作。

def create
@object = Object.new(importer_params)
respond_to do |format|
if @object.save
MyJob.perform_later( @object.id )
format.html { redirect_to @object, notice: t('.notice') }
else
format.html { render :new }
end
end
end

我想测试在 Controller 规范中是否正确调用了 Job。
describe "POST #create" do
it {
expect {
post :create, { object: valid_attributes }
}.to change(Object, :count).by(1)
}
it {
expect {
post :create, { object: valid_attributes }
}.to have_enqueued_job(MyJob)
}
end

但我得到
Failure/Error:
expect {
post :create, { object: valid_attributes }
}.to have_enqueued_job(MyJob)
expected to enqueue exactly 1 jobs, but enqueued 0

第一个测试通过,所以我知道对象保存成功。测试 ActiveJob 是否已入队的正确方法是什么?

最佳答案

我一直在看ActiveJob::Base.queue_adapter.enqueued_jobs的大小测试是否调用了作业。给出代码

it 'does something' do
expect {
post :create, { object: valid_attributes }
}.to change {
ActiveJob::Base.queue_adapter.enqueued_jobs.count
}.by 1
end

您应该确保在每个规范之后将 enqueued_jobs 设置为空数组,以避免任何意外行为。您可以在 spec/rails_helper.rb 中执行此操作

关于ruby-on-rails - 如何测试 ActiveJob 是否已入队?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41008740/

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