QA@IT

Rspecでタイムアウトをスタブで指定したいのですが実現可能でしょうか。

3811 PV
Class Hoge
  def test2
    a = 1
  end
  def test
    Timeout.timeout(15) do
      res = test2
    end
  rescue Timeout::Error => e
    p 'main: timeout', e.backtrace.first
  end
  test
end

test2の実行箇所をRspecのスタブでsleepを15にして
タイムアウト時の挙動をテストしたいです。

わかりましたらお願い致します。

回答

RSpec 3 であればこんなかんじでしょうか。

class Hoge
  def test
    Timeout.timeout(15) do
      p 'ok'
    end
  rescue Timeout::Error
    p 'main: timeout'
  end
end

RSpec.describe Hoge do
  before do
    allow(Timeout).to receive(:timeout).and_raise(Timeout::Error)
  end

  it { expect { Hoge.new.test }.to output('main: timeout').to_stdout }
end
編集 履歴 (0)
  • ありがとうございます。明日確認してみます! -
ウォッチ

この質問への回答やコメントをメールでお知らせします。