django - مترجم - فيلم جانغو الحر يوتيوب




دجانغو UrlResolver ، مضيفا عناوين المواقع في وقت التشغيل للاختبار (2)

أعلم أن هذا سُئل منذ فترة ، لكنني اعتقدت أنني سأجيب عليه مرة أخرى لتقديم شيء أكثر اكتمالاً وحداثة.

لديك خياران لحل هذه المشكلة ، أحدهما هو توفير ملف url الخاص بك ، كما هو مقترح بواسطة إجابة SystemParadox:

class MyTestCase(TestCase):
    urls = 'my_app.test_urls'

والآخر هو قرد التصحيح عناوين المواقع الخاصة بك. هذه ليست الطريقة الموصى بها للتعامل مع عناوين URL المتراكمة ولكن قد تصل إلى موقف لا تزال بحاجة إليه. للقيام بذلك لحالة اختبار واحدة دون التأثير على بقية يجب عليك القيام بذلك في طريقة setUp() الخاصة بك ومن ثم تنظيف في طريقة tearDown() الخاص بك.

import my_app.urls
from django.conf.urls import patterns

class MyTestCase(TestCase):
    urls = 'my_app.urls'

    def setUp(self):
        super(MyTestCase, self).setUp()
        self.original_urls = my_app.urls.urlpatterns
        my_app.urls.urlpatterns += patterns(
            '',
            (r'^my/test/url/pattern$', my_view),
        )

    def tearDown(self):
        super(MyTestCase, self).tearDown()
        my_app.urls.urlpatterns = self.original_urls

يرجى ملاحظة أن هذا لن يعمل إذا قمت بحذف سمة فئة عنوان urls . هذا لأن عناوين url سيتم تخزينها في ذاكرة التخزين المؤقت وإلا لن يصبح تصحيح قردك ساري المفعول إذا قمت بإجراء الاختبار مع حالات اختبار أخرى.

إنني أتطلع إلى إجراء بعض الاختبارات ولست على دراية بـ URLResolver بعد ولكنني أريد حل هذه المشكلة بسرعة.

في TestCase ، أود إضافة عنوان URL إلى المحلل حتى أتمكن بعد ذلك من استخدام Client.get('/url/') والاحتفاظ بها منفصلة عن urls.py


منذ Django 1.8 باستخدام django.test.TestCase.urls هو إهمال . يمكنك استخدام django.test.utils.override_settings بدلاً من ذلك:

from django.test import TestCase
from django.test.utils import override_settings

urlpatterns = [
    # custom urlconf
]

@override_settings(ROOT_URLCONF=__name__)
class MyTestCase(TestCase):
    pass

يمكن تطبيق override_settings إما على فئة كاملة أو على طريقة معينة.





testcase