-2

We have threads:

module Task
  def self.execute
    "result"
  end
end

threads = []
threads << Thread.new { Task.execute }

We need to specify the test that checks the result:

expect(Task.execute).to eq("result")

We added a thread inside a thread:

threads << Thread.new do
  deep_thread = Thread.new { Task.execute }
  deep_thread.join
end

How can we check the result of method calls inside a thread? How can we check that the two threads finished, and also check the result of deep_thread?

sawa
  • 165,429
  • 45
  • 277
  • 381
Alex Strizhak
  • 910
  • 1
  • 12
  • 22

1 Answers1

1

Test the results of method calls separately outside of the thread logic.

Then test the thread creation logic separately with something like:

let(:thread) { double }
it 'creates threads' do
  expect(Thread).to receive(:new).exactly(5).times.and_return(thread)
  expect(thread).to receive(:join).exactly(5).times.and_return(true)
  expect(Task).to receive(:execute).exactly(5).times.and_return("xyz")
  expect(subject.execute).to eq "xyz"
end
Kimmo Lehto
  • 5,910
  • 1
  • 23
  • 32