ruby - Ruby 线程的 Rspec 测试失败
问题描述
我有一个看起来像这样的工作方法
class ScoreWorker
include Sidekiq::Worker
sidekiq_options queue: 'score_worker'
def perform(scores, notification, devices)
threads = []
scores.each do |gg|
threads << Thread.new { PushNotificationService.new(notification, devices).deliver }
end
threads.each { |thr| thr.join }
end
我正在为我的工人编写 rspec 测试
describe ScoreWorker do
self.use_transactional_fixtures
before(:all) do
Rails.cache.clear
end
describe '.perform' do
self.use_transactional_fixtures
context 'create' do
it 'creates notification' do
job = create(:job)
notification = create(:notification)
devices = create(:device)
scores = ScoringService.new(job, 25).score
worker = ScoreWorker.new
expect do
worker.perform(scores, notification, devices)
end.to change(Notification, :count).by(1)
end
end
end
end
但是每当我运行我的测试时,它总是失败,因为 rspec 似乎不支持线程。所以我的工作、通知和设备对象都是空的。
在 rspec 中使用 ruby 线程时如何运行测试
解决方案
推荐阅读
- reactjs - React 使用 useRef 计算孩子的总宽度
- android - 片段不响应自定义视图上的 onClick 事件
- oracle - 错误数量或类型的参数错误 oracle 表单
- ios - iOS NSCoreDataCoreSpotlightDelegate,如何重新索引所有项目
- javascript - Node.js - 如何使用 MySQL 查询从 for 循环中返回带有数组的回调?
- codenameone - 使用代号一组件检查器树中的验证按钮
- android - Android-manifest 中的编码类型会导致以下问题:查找默认活动和编译过程
- javascript - 带有 jquery 验证的动态添加 name=name[] 的 Html 标记
- angular - _co.openSignup 不是函数
- android - Room - 只读取一次数据时不需要 LiveData?