首页 > 解决方案 > 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​​ 线程时如何运行测试

标签: rubymultithreadingrspecrspec-railsruby-thread

解决方案


推荐阅读