ウェブサービスを作っています。

RSpec で sleep を stub する

上記の方法でうまくいかない、ライブラリ内部などで sleep されている場合を考えてみました。

spec/support/stub_sleep.rb

module Kernel
  def sleep_with_stub(*args)
    # do nothing
  end
end

RSpec.shared_context 'Stubbing sleep', stub_sleep: true do
  before { Kernel.send :alias_method_chain, :sleep, :stub }
  after { Kernel.send :alias_method, :sleep, :sleep_without_stub }
end

実行時には、stub_sleep タグをつけます。

describe Foo, :stub_sleep do
  ...
end