on_commit फ़ंक्शन को वर्तमान लेनदेन के बाद एक क्रिया (जैसे एक सेलेरी कार्य) को ट्रिगर करने में सक्षम होने के लिए Django 1.9 में जोड़ा गया है।डाटाबेस को साफ़ किए बिना Django on_commit हुक का परीक्षण कैसे करें?
वे बाद में in the docs का उल्लेख करते हैं कि किसी को उस फ़ंक्शन पर भरोसा करने वाली सुविधाओं का परीक्षण करने के लिए TransactionTestCase
का उपयोग करना चाहिए। हालांकि, TestCase
(जो लेनदेन का उपयोग करता है और उन्हें वापस रोल करता है) के विपरीत, TransactionTestCase
प्रत्येक परीक्षण के बाद पूरे डेटाबेस को खाली करता है।
दुर्भाग्यवश, मेरे पास डेटा माइग्रेशन है जो डेटाबेस के अंदर कुछ उपयोगी डेटा प्रीलोड करता है, जिसका अर्थ है कि पहले परीक्षण डेटाबेस के बाद साफ़ होने के बाद और परीक्षण नहीं करते हैं।
with mock.patch.object(django.db.transaction, 'on_commit', lambda t: t()):
test_something()
वहाँ एक बेहतर तरीका है:
मैं on_commit
मजाक से एक गंदा चाल का सहारा समाप्त हो गया?
वास्तव में अपने वैकल्पिक हल है कि बुरा नहीं है: इस लेख की जाँच करें। और मैं 'ट्रांज़ेक्शनटेस्टकेस' का उपयोग नहीं करना चाहता क्योंकि यह मेरे उपयोगकेस (बड़े 'सेटअप और फिक्स्चर के बहुत सारे) के लिए धीमा है। – Palasaty