2017-02-05 7 views
7

जब सेलेरी कार्यों का उपयोग करने वाले Django अनुप्रयोगों में परीक्षण चलते हैं, तो मैं डेटाबेस से डेटा प्राप्त करने की आवश्यकता वाले कार्यों को पूरी तरह से परीक्षण नहीं कर सकता क्योंकि वे परीक्षण डेटाबेस से कनेक्ट नहीं होते हैं जो Django पैदा करता है।Celery का उपयोग Django के परीक्षण डेटाबेस को task_always_eager के बिना करें

True को अजवाइन में task_always_eager स्थापना आंशिक रूप से इस समस्या का हल है, लेकिन के रूप में documentation for testing कहते हैं, यह पूरी तरह से प्रतिबिंबित नहीं करता है कैसे कोड कोई वास्तविक अजवाइन कार्यकर्ता पर चलाने के लिए और परीक्षण के लिए उपयुक्त नहीं है जाएगा।

task_always_eager = True सेट किए बिना Django परीक्षण चलाते समय मैं सेलेरी कार्यों को Django परीक्षण डेटाबेस का उपयोग कैसे कर सकता हूं?

उत्तर

8

लघु = आप उत्पादन में के रूप में

आसान अजवाइन कार्यकर्ता चलाना चाहिए: (उत्पादन के रूप में)

  • कॉन्फ़िगर अजवाइन
  • प्रारंभ अजवाइन कार्यकर्ता मैन्युअल रूप से इसे उपयोग करने के लिए

    1. उपयोग समर्पित परीक्षण db आप परीक्षण चलाने से पहले

    उन्नत:

    1. उपयोग ऑटो बनाया परीक्षण db अपने परीक्षण सेटअप ऑटो बनाया परीक्षण डाटाबेस का उपयोग करने के()
    2. कॉन्फ़िगर अजवाइन में (यह SQLite हो सकता है)
    3. भागो अजवाइन कार्यकर्ता (परीक्षण से django.conf.settings.DATABASE कॉपी अजवाइन को प्रक्रिया)

    और हमेशा आप अजवाइन के लिए संदेश दलाल प्रदान करनी चाहिए।

    मैं एक परीक्षण है कि मेरे कोड है कि अजवाइन काम और बुला कोड के बीच संदेश गुजरता जाँच करने के लिए समर्पित अजवाइन कार्यकर्ता की आवश्यकता है: https://gist.github.com/Sovetnikov/a7ad982fc77e8dfbc528bfc20fcf3b1e यह अजगर मॉड्यूल एक में दो है - आत्म निहित विन्यास के साथ एक TestUnit और अजवाइन कार्यकर्ता धावक।

    मेरा कोड किसी भी डीबी का उपयोग नहीं करता है, लेकिन आप इसे आसानी से अपनी जरूरत के अनुसार अनुकूलित कर सकते हैं। बस django.conf.settings.DATABASE (जेसन या अचार के रूप में या जो कुछ भी आपको पसंद है) पास करें, सेलेरी स्टार्टर कोड के लिए और परीक्षण डीबी को इंगित करने के लिए Django डेटाबेस को कॉन्फ़िगर करें।

    अतिरिक्त जानकारी:

    1. वहाँ इस मामले https://github.com/RentMethod/celerytest (i इसके बारे में कुछ पुराने संस्करण की कोशिश की और क्योंकि यह सूत्र का उपयोग करता है, अजगर जीआईएल साथ विफल रहता है ... और मैं के लिए पूर्ण समाधान है लगता है कि यह) से अधिक जटिल है

    2. नमूना कोड, डेटाबेस सेटिंग्स कॉन्फ़िगर और init करने के लिए कैसे एक मॉड्यूल में ही django https://gist.github.com/Sovetnikov/369a8d05ba2b6482fa20769bc498f122

  • 0

    एक आसान समाधान use celery.contrib.testing.worker.start_worker to spawn a Celery worker within the Django test process है। चूंकि यह एक ही प्रक्रिया में रहता है, यह डिफ़ॉल्ट इन-मेमोरी टेस्ट डेटाबेस तक पहुंच सकता है, लेकिन क्योंकि यह अपने धागे में रहता है, यह उत्सुक नहीं है और task_always_eager ध्वज की आवश्यकता नहीं है या अनुशंसित नहीं है।

    संबंधित मुद्दे