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)

 

できた時の周りの反応が薄かった・・・

 

jenkinsでgitを使うときにはまったこと

jenkinsを入れた時にしょうもない部分で2週間ぐらいハマったのでメモ

gitのインストールして公開鍵も設定した。

なぜかjenkinsからssh://server/repository.gitで取ってこれない。

 

しかたなく「/etc/passwd」をいじってjenkinsユーザーでログインできるようにしてsshしてみたら

known hostsが設定されてなかった。

ログインできないだけに盲点だった。

 

その後調べてみたらこんな感じで同じことができるらしい

sudo -u jenkins ssh ユーザー@サーバー