gpt4 book ai didi

ruby-on-rails - Rspec 可以等待 ApplicationJob 的回答吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:31 25 4
gpt4 key购买 nike

我正在从规范文件中调用模型内部的方法。但是,该方法有一个后台作业。如何将规范设置为等待后台作业的响应?可能吗?

我的 Rspec 文件:user_spec.rb

require 'rails_helper'
RSpec.describe User, type: :model do
let(:user) { user.create(name: "Test User Name",last_name: "") }
describe "existing user instance" do
it "fetch last name" do
user.update_last_name!
expect(user.last_name).to eq("Test Last Name")
end
end
end

我的模型文件:user.rb

class User < ApplicationRecord

def update_last_name!
UpdateLastNameJob.perform_later(self.id,"Test Last Name")
end

end

我在 reddis 中的后台工作:update_last_name_job.rb

class UpdateLastNameJob < ApplicationJob
@queue = :default
def perform(user_id,last_name)
@user = User.find(user_id)
@user.last_name = last_name
@user.save
end
end

最佳答案

我是这样解决的:

require 'rails_helper'
RSpec.describe User, type: :model do

include ActiveJob::TestHelper

let(:user) { user.create(name: "Test User Name",last_name: "") }


describe "existing user instance" do
it "fetch last name" do
user.update_last_name!
# update_last_name! is calling a background job, so the result will not be ready yet.
expect(user.last_name).to eq("")
# This line is goint to execute the backgound job
perform_enqueued_jobs
# Models reload with new data
user.reload
# Will work!
expect(user.last_name).to eq("Test Last Name")
end
end
end

关于ruby-on-rails - Rspec 可以等待 ApplicationJob 的回答吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58617727/

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