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
です。そのスレッドが実行されるまでテストを適切に遅らせる方法はありますか?