rspecでsleepをスタブする方法
やけに時間が掛かるテストがあるなと思ったらメソッドにsleepが入ってました。
スタブ化したら早くなるんじゃないかと思って調べてみた。
サンプルコード
class User << ActiveRecord::Base def hoge sleep 5 true end end
describe "hoge" do it "should be true" do user = User.new user.hoge.should be_true end end
テスト実行
rspec user_spec.rb . Finished in 5.01 seconds 1 exampel, 0 failures
sleepの5秒がちゃんとかかっております。
最初に考えたのは、sleepはKernelのメソッドだから
Kernel.stub(:sleep)
でうまくいくんじゃ・・・と思ったら見事反応なし。
検索してみても有効な方法がみつからない。
いろんな人に聞いた結果こんな感じでできました。
user.stub(:sleep)
実行結果も短くなった。
Finished in 0.031 seconds 1 exampel, 0 failures
ちゃんとsleepしてるかテストするにはモックで
user.should_receive(:sleep).with(5)
できた時の周りの反応が薄かった・・・