2011-09-12 6 views
4

私は次のモカモックを持っています。モカモックを解体する方法は?

test.rbファイルで:

setup do 
    Date.stubs(:today).returns(Date.new(2011, 7, 19)) 
    Time.stubs(:now).returns(Time.new(2011,1,1,9,0)) 
end 

問題はタイミングがテストのために壊れているということです。テストは、日付と時刻オブジェクトを実行した後、まだ嘲笑されている

Finished in -21949774.01594216 seconds.

私は次のように付け加えた。(!):

teardown do 
    Date.unstubs(:today) 
    Time.unstubs(:now) 
end 

これは、各テストのために次のエラーがスローされます。WARNING: there is already a transaction in progress

これはアンスタンドするのに適切な方法ですか?テストファイルの終わりで、またはユニットテストスイートの終わりでもアンスタブする方が良いでしょうか?

Rails 3.07とMochaで作業する0.9.12

ありがとうございました。

答えて

9

これが完全に問題であるかどうかはわかりませんが、複数化されていないのはちょうどunstubです。

それ以外は問題ありません。いったんスタブされると、スタブされた状態になり、他のテストが失敗する可能性があるため、各テスト(または複数のテストではスタブが必要な場合は、一連のテスト)の後でアンスタブします。

+6

テストの間でアンスタブする必要はありません。各テストは一から始まります。 "unstub"の使用例は、設定の一部としてものをスタブするテストグループがある場合ですが、そのグループ内のテストの一部は、その一部をスタブしないようにする必要があります。 –

+0

「unstubs」ではなく「unstub」は、複数形です。「unstubs、unstubs」私はモカのここでの動詞の選択は矛盾していると思います。 –

5

受け入れられた回答は誤った情報を広げており、有害であるとみなされるべきです。

モカのようなモッキングライブラリの主な目的の1つは、さまざまなテストライブラリへの統合の一環として自動モック/スタブティアダウンを提供することです。実際にGitHub repo for Mochaを見ると、いくつかの異なるテストフレームワークのすべてのバージョンでMochaをスムーズに動作させるための重要な保守作業が行われていることがわかります。

これが正しく動作しない場合は、モカの内蔵ティアダウンが動作しない理由を理解する必要があります。自分のティアダウンで手動でアンスタビングするのは、問題をペーパリングするだけで、スタブの漏れやモカなどの微妙な問題を隠す可能性があります。

私は野生の推測を取らなければならなかった場合、野生のこの種のもので見たことが最も一般的な原因であるため、何らかの形で実際のテストの外で実行されるお金があなたのスタブにあります。本当に確かめるために質問から。

関連する問題