اذهب إلى المحتوى

السؤال

نشر

قرأت في توثيق جانغو Django من قبل أنه يمكن أن يتم تشغيل إختبار test واحد ومحدد من خلال الأمر:

./manage.py test posts.PostTestCase

ويفترض هذا الأمر أن هناك اختبارات في ملف test.py. إذا كان هذا صحيحًا، فإن هذا الأمر يعمل كما هو متوقع. وقمت بعمل بعض الإختبارات في مجلد tests، ويمكنني تشغيلها من خلال الأمر:

./manage.py test my_app

لكن المشكلة تظهر عندما أريد تشغيل إختبار واحد فقط، كالتالي:

./manage.py test my_app.tests.post_tests.PostTestCase

ValueError: Test label 'my_app.tests.post_tests.PostTestCase' should be of the form app.TestCase or app.TestCase.test_method

لذلك حاولت أن أغير الأمر كما وضحت رسالة الخطأ، لكن ظهر لي خطأ بأن هذا إختبار غير موجود:

./manage.py test my_app.PostTestCase

ValueError: Test label 'my_app.PostTestCase' does not refer to a test

ما سبب هذه المشكلة؟ وكيف أقوم بتشغيل إختبار واحد في جانغو Django؟

Recommended Posts

  • 1
نشر

منذ الإصدار 1.6 من جانغو Django يمكنك تشغيل حالة اختبار كاملة، أو اختبار فردي. سيتم اكتشاف الاختبارات تلقائيًا الموجودة في أي ملف يبدأ بكلمة test ضمن المسار الحالي Current Working Directory (CWD). لذلك إذا كنت في نفس المجلد الذي يحتوي على الملف manager.py وتريد تشغيل test_a داخل الصنف الفرعي A داخل الملف test.py ضمن التطبيقapp / الوحدة module باسم example، فيجب أن تنفذ الأمر التالي:

./manage.py test example.tests.A.test_a

ويمكننا أن نضع صيغة الأمر كالتالي:

./manage.py test app_name.tests.SubClass.test_name

كما يمكنك أن تستخدم الحزمة django-nose التي تتيح لك تحديد الاختبارات لتشغيلها على النحو التالي:

./manage.py test another.test:TestCase.test_method

أو كما هو مذكور في التعليقات ، استخدم بناء الجملة:

./manage.py test another.test.TestCase.test_method

لاحظ أن الأمر الأخير لا يحتوي على علامة نقتطين : عكس الأمر الذي يسبقه.

لتثبيت حزمة django-nose يمكنك تنفيذ أحد الأمر التاليين:

pip install django-nose
pip install -e git://github.com/jazzband/django-nose.git#egg=django-nose

ثم يجب إضافة الحزمة ضمن التطبيقات المثبته installed apps في ملف settings.py، كالتالي:

INSTALLED_APPS = (
    # ...
    'django_nose',
    # ...
)

وفي النهاية يجب إضافة TEST_RUNNER إلى نفس الملف لكي تتمكن الحزمة من تشغيل الإختبارات:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

 

  • 0
نشر

يمكنك أيضاً وضع الكود التالي في __init__.py وسيستورد جميع فئات الاختبار في الحزمة والحزم الفرعية. وسيسمح لك هذا بإجراء اختبارات محددة دون استيراد كل ملف يدويا:

import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
    module = loader.find_module(module_name).load_module(module_name)
    for name in dir(module):
        obj = getattr(module, name)
        if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
            exec ('%s = obj' % obj.__name__)

وبشكل مشابه، بالنسبة لمجموعة الاختبار الخاصة بك، يمكنك ببساطة استخدام:.

def suite():   
    return unittest.TestLoader().discover("appname.tests", pattern="*.py")

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...