on_commit fonksiyonu mevcut işlem işlenen sonra bir işlem (örneğin, bir kereviz görev) tetiklemek için mümkün Django'ya 1.9 eklenmiştir. Bu işleve dayanan özellikleri sınamak için TransactionTestCase
kullanması gerektiğini daha sonra in the docs'dan bahsetmişlerdir. Bununla birlikte, TestCase
'dan farklı olarak (işlemleri kullanan ve geri döndüren), TransactionTestCase
her bir testten sonra tüm veritabanını boşaltır.Veritabanını temizlemeden Django on_commit kancası nasıl test edilir?
Ne yazık ki, ilk test veritabanını temizler sonra müteakip testler artık işe yaramamaktadır demektir veritabanı, içindeki bazı yararlı veriler önceden yüklemek veri taşıma işleminiz var. Daha iyi bir yol
with mock.patch.object(django.db.transaction, 'on_commit', lambda t: t()):
test_something()
var mı:
Ben on_commit
alay ile kirli bir hile başvurmadan sona erdi?
Aslında senin geçici çözüm o kadar da kötü değil: bu makaleye göz atın . Ve ben 'TransactionTestCase' kullanmak istemiyorum çünkü benim usecase için yavaş (büyük 'setUp's ve birçok fikstür.) – Palasaty