在 RSpec 中,我有创建一个新线程的函数,并在该线程内执行一些操作——在我的例子中,调用TCPSocket#readline
. 这是现在的功能:
def read
Thread.new do
while line = @socket.readline
#TODO: stuff
end
end
end
由于线程调度,如果这样写,我的测试将失败:
it "reads from socket" do
subject.socket.should_receive(:readline)
subject.read
end
目前我知道解决这个问题的唯一方法是使用sleep 0.1
. 有没有办法正确延迟测试直到该线程运行?