on_commit機能がDjango 1.9に追加され、現在のトランザクションがコミットされた後にアクション(例えば、Celeryタスク)をトリガできるようになりました。データベースをクリアせずにDjangoのon_commitフックをテストするには?
これらは後でin the docsに記載されています。その機能に依存する機能をテストするには、TransactionTestCase
を使用する必要があります。しかし、TestCase
(トランザクションを使用してロールバック)とは異なり、TransactionTestCase
は各テスト後にデータベース全体を空にします。
残念ながら、データベース内にいくつかの有用なデータをプリロードするデータ移行があります。つまり、最初のテストでデータベースがクリアされた後、後続のテストがもう機能しなくなります。
私はon_commit
をあざけることにより、汚れたトリックに頼ることになった:
with mock.patch.object(django.db.transaction, 'on_commit', lambda t: t()):
test_something()
は、より良い方法はありますか?
実際にあなたの回避策はそれほど悪くないです。そして、私は私のユースケース(大規模な 'setUp'やたくさんの什器)が遅いため、' TransactionTestCase'を使いたくないです。 – Palasaty