0

I have a worker method which looks like this

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

I am writing an rspec test for my worker

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

But whenever i run my tests, it keeps failing as rspec doesnt seem to support threading. So my job, notification and devices object are all empty.

How can i run my tests when using ruby threads in rspec

Kingsley Simon
  • 2,090
  • 5
  • 38
  • 84

0 Answers0