Techioz Blog

RSpec: Kernel::sleep をスタブ化しますか?

概要

rspec シナリオで Kernel.sleep をスタブする方法はありますか?

解決策

オブジェクトのコンテキスト内で sleep を呼び出している場合は、次のようにオブジェクト上で sleep をスタブする必要があります。

class Foo
  def self.some_method
    sleep 5
  end
end

it "should call sleep" do
  Foo.stub!(:sleep)
  Foo.should_receive(:sleep).with(5)
  Foo.some_method
end

重要なのは、睡眠が呼び出される文脈において「自己」が何であれ、睡眠をスタブすることです。