rspecシナリオでKernel.sleepをスタブする方法はありますか?RSpec:Kernel :: 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
キーは、どのような「自己」でも、睡眠が呼び出される状況にある。
私のためにうまくいった、乾杯! – opsb
テスト中のオブジェクトをスタブするのは良い考えではありません。例については、http://robots.thoughtbot.com/don-t-stub-the-system-under-test – georgebrock
@georgebrockを無関係な理由で参照してください。私は[これは](http://stackoverflow.com/a/27749263/52499)が意図を最もよく伝える方法だと信じています。より新しい構文を使用している必要があります。 'allow_any_instance_of(Object).to receive(:sleep)' –
あなたがMochaを使用している場合は、このような何かが動作します:
def setup
Kernel.stubs(:sleep)
end
def test_my_sleepy_method
my_object.take_cat_nap!
Kernel.assert_received(:sleep).with(1800) #should take a half-hour paower-nap
end
それともrrを使用している場合を:
def setup
stub(Kernel).sleep
end
def test_my_sleepy_method
my_object.take_cat_nap!
assert_received(Kernel) { |k| k.sleep(1800) }
end
あなたおそらくは、より多くのをテストするべきではありません単体テストと複雑なスレッドの問題。しかし、統合テストでは、Kernel.sleep
という実数を使用してください。複雑なスレッドの問題を解決するのに役立ちます。純粋なRSpecので
:
before do
Kernel.stub!(:sleep)
end
it "should sleep" do
Kernel.should_receive(:sleep).with(100)
Object.method_to_test #We need to call our method to see that it is called
end
これは私にとってすぐにはうまくいかなかったので、 。それをこのように嘲笑するために。ちょうど睡眠を直接呼び出すと失敗します –
はい、あなたが呼び出すメソッドは、その中に睡眠を持っています。 – nitecoder
は私がスタブするために必要な必要と長い検索の後に私は私のために働いていた唯一の方法は、内この
def method_using_sleep
sleep
sleep 0.01
end
it "should use sleep" do
@expectations = mock('expectations')
@expectations.should_receive(:sleep).ordered.with()
@expectations.should_receive(:sleep).ordered.with(0.01)
def sleep(*args)
@expectations.sleep(*args)
end
method_using_sleep
end
私はここで他のソリューションを利用することができませんでした。おそらく、Rubyの新しいバージョンなどで睡眠が処理される方法が変わったかもしれません。
私がやったことは、スリープコールを受信すると思われるので、オブジェクトクラスをモンキーパッチすることでした。だから私はこれを単に追加しました:
class Object
def sleep(*args)
end
end
したがって、sleepメソッドは何かの代わりに何もしません。これをもっとうまく模倣する方法があるかもしれませんが、私は、それを使用する可能性のあるすべてのオブジェクトのsleep metohd
を嘲笑せずに良い解決策を見つけることができませんでした。
私の解決策をご覧ください。 rspec-mockはここにありますので、あなたはmonkey-patchにする必要はありません – Benj
sleep
への呼び出しは、オブジェクト内ではない(例えばrakeタスクをテストしている間)、あなたはブロックの前(RSpecの3構文)に以下を追加することができます
allow_any_instance_of(Object).to receive(:sleep)
- 1. Rails Sleep()は同時接続を使用していますか?
- 2. キュウリ/カピバラ/セレンのAjaxリクエストをスタブしていますか?
- 3. UnitTestingヘルプ:スタブを使用していますか?
- 4. コンストラクタの変数をスタブしますか?
- 5. スタブのないメソッド呼び出しをアサートしますか?
- 6. Proxyquireがスタブしていない
- 7. スタブ宣言ではなく、実行時にrspecスタブを実行しますか?
- 8. Sinon.JSでasync.waterfallをスタブして
- 9. java.lang.RuntimeException:スタブ! AndroidプロジェクトでJunitを実行しています
- 10. RhinoMocks - スタブ私はRhinoMocksを使用しています。パラメータ
- 11. RSpecでは、スタブの違いは何ですか?とスタブ?
- 12. RSpecを使用して既にスタブされたコントローラメソッドでメソッドをスタブする方法はありますか?
- 13. sleep(1)コールはFortranで何を意味しますか?
- 14. スタブisAuthenticatedは複合ミドルウェアで書かれています
- 15. スタブのユニットテストで何が問題になっていますか?
- 16. プロキシ/スタブでインターフェイスが公開されていますか?
- 17. sleep()Cは正しい値を返しません
- 18. javacがRMIのスタブを作成していません
- 19. PHP sleep()が動作しない
- 20. PerlデーモンがSleep()で動作しない
- 21. PHP - ヘッダリダイレクトの後にsleep()を使用してください
- 22. std :: thread sleepの使い方
- 23. オブジェクトのインスタンスにメソッドをスタブします
- 24. readOnlyプロパティの動作をスタブします。
- 25. RSpec:ビュー内にコントローラメソッドをスタブします
- 26. Proxyquireはスタブしません
- 27. Sleep()in java(Android)
- 28. Python QT4 - time sleep
- 29. Selenium wait/sleepコマンド
- 30. SwitchToThread vs Sleep(1)
あなたは超えて何かを探していKernel :: stubs(:sleep) –
私は彼が働きたいと思っていて眠らないと思っていたかもしれません... – Rich