2012-01-05 6 views
0

ほとんどの人は、ユニット/機能テストの実行中にデータベースを空にしたいと思いますが、問題をデバッグしていて、テストの前後にテストデータベースが空であるということは驚くべきことです。セットアップとティアダウンに何かを入れて特定のテーブルのサイズを印刷しても、セットアップ時には常に0になり、ティアダウンでは0以上になることがあります。rails testを実行する前後にテストデータベースが空白になるのはなぜですか?

私にとってこれは何をしていますか?私はfixturesを持っていません(私はtest_helperのデフォルトの "fixtures:all"をコメントアウトしています)、ActiveSupport :: TestCase(RSpecやそれに類するもの)を拡張する単純なユニット/機能テストを使用しています。私は、レールプロジェクトを生成して以来、多くの/カスタム設定/セットアップを追加していません。

私はRails 3.0.9とRuby 1.8.7を実行しています。

すべてのアイデアを歓迎します!

+0

はむしろコードの単なる説明よりも、いくつかの実際のコードを見て参考になります。 –

答えて

3

あなたがuse_transactional_fixturesfalseに設定することで、この動作を無効にすることができます

class MyTest < ActiveSupport::TestCase 
    self.use_transactional_fixtures = false 
end 
+0

ありがとうございました。これは、Rails 1.0以降のインターネット検索の高速化によるものです。奇妙なことに、デフォルトの場合、実行間でデータを削除する方法について多くのヒットが見つかりましたか? –

0

ユニットテストには既知のフレッシュな状態が必要です。そのため、DBがクリアされます。

テストDBがワイプされないようにすることは、RSpecを使って簡単に行うことができます。 Railsに組み込まれているTest :: Unitの内容の中でどのように行うのかはわかりませんが、簡単なデバッグのためのものであれば、単にロガーを使用してテストログをテーリングするだけです。 test.logにドロップされますと、それは簡単にあなたがそこに他のすべてのものの真っ只中にそれを参照してくださいできるようにするために、各側にカップルの改行を入れます

 
Rails.logger.info "\n\nThe value of foo is #{foo}\n\n" 

希望に役立ちます。

+0

残念ながら、私はすでにprintステートメントでデバッグしていますが、何がうまくいかないのかまだ分かりません。自動テストからテストを実行するときに、ときどきしか起こらないデータベースの不一致があるようです。コマンドラインから "ruby -Itest ..."を使ってテストを繰り返し実行すると、常に正常に動作します。私はそれは、親クラスが複数回実行されていることと関係があると思います。 –

+0

私はいくつかのprintステートメントを追加しました(実際にはさまざまな場所に "puts ..."が追加されました)、XとYの両方にX

+0

実行の間にDBをクリアすることは、それを使って(1.3xから)。あなたのクラス設定を少しでもやり直すことができるかもしれないと聞こえて、まだビジネスに...? :-) – trevrosen

関連する問題