2009-07-29 4 views
5

私はサブバージョンから投稿コミットフックまで私のdjangoアプリケーションへの統合を提供しようとしています。は、djangoテストケースによって挿入されたレコードを見ることができません

私は、(a)テーブルにいくつかのレコードを挿入し、(b)svnコミットを生成し、(c)svn commitが私を使用するフックを実行するというdjangoテストケース(unittest.TestCaseのサブクラス) djangoモデルは情報を検索する。

私はsqlite3 dbを使用しています。テストはではなく、を使用しています:memory:db、実際のファイルを使用しています。私はdjangoテストコードを修正して(この問題をデバッグするために)、テストDBを削除しないようにしています。

テストコードはmodel.MyModel.objects.all()をダンプし、レコードは(a)と(b)の間にあります。

(c)でフックが発生すると、モデルもダンプされ、レコードはありません。テストの実行後にDBを手動で検査すると、レコードはありません。

dbファイルにレコードをコミットしていないdjangoテストフレームワークに何か問題がありますか?

を明確にする:(d)テストケースを終了する。したがって、svn commitフックは、テストケースが終了する前、および任意のdjango dbクリーンアップコードの前に実行され、が実行されます。

追加情報:(b)と(b)の間に15秒の遅延を追加して、テストの途中で手動でdbファイルを調べることができました。レコードはファイルにありません。

答えて

5

Djangoトランクを使用していますか?最近の変更(Changeset 9756)は、トランザクション内でテストを実行してから、ロールバックされます。 - (データベースがそれをサポートしている場合)テスト をロールバックする django.test.TestCaseを変更 の代わりに、フラッシュと データベースを再ロード

修正#8138:ここでは、チェックインのコメントです。これは実質的に を実行するのにかかる時間を短縮することができます テストスイート。

+0

Vinay、ありがとうございます。私はそのコードを私の木に持っています。私はトランザクションのサポートを偽に強制し、テストは合格となりました。 – bstpierre

+0

@bstpierre、どのようにしてトランザクションのサポートを強制的にFalseにしましたか? – Greg

+0

チェンジセットの外観から@Greg私はおそらく 'TestCase'の代わりに' TransactionTestCase'を使用しましたが、これは過去7年間にいくつか変更されているかもしれないという公正な賭けです – bstpierre

0

テストフレームワークはデータをデータベースに保存していないため、テストが完了するとデータは消去されます。

関連する問題