Pytest-django: الحصول على Doctest بشكل متقطع "فشل: الوصول إلى قاعدة البيانات غير مسموح به ، استخدم علامة" django_db "للتمكين"

تم إنشاؤها على ٢٢ ديسمبر ٢٠١٥  ·  6تعليقات  ·  مصدر: pytest-dev/pytest-django

باستخدام Python 3.4 و pytest-django 2.8.0 و pytest 2.7.0 و django 1.7.6 و Postgresql 9.3.9

عند إجراء اختبارات الوحدة الخاصة بي ، لدي خطأ متقطع يعود من دوكتيست الوحيد. تمر جميع اختبارات الوحدة الخاصة بي على ما يرام ويستخدم الكثير منها قاعدة البيانات. هذا هو طلب الاختبار الخاص بي:
الوقت py.test -n 7 -s -v - المدد = 10

يجب إنشاء 273 هدفًا في سياق المحفظة.
274 >>> استيراد بيتيست
275 >>> علامة pytestmark = pytest.mark.django_db ()
276 >>> من حافظة استيراد نماذج
277 >>> p، new = Portfolio.objects.get_or_create (name = "نموذج للأهداف")
استثناء غير متوقع: الوصول إلى قاعدة البيانات غير مسموح به ، استخدم علامة "django_db" للتمكين

إزالة السطور 274 و 275 ليس لها تأثير.

documentation enhancement

التعليق الأكثر فائدة

تضمين التغريدة

لقد وجدت أن التركيب التالي يسمح بالوصول إلى db في أطبائي

@pytest.fixture
def db_doctest(request, _django_cursor_wrapper):
    from django.test import TestCase as django_case
    _django_cursor_wrapper.enable()
    request.addfinalizer(_django_cursor_wrapper.disable)
    case = django_case(methodName='__init__')
    case._pre_setup()
    request.addfinalizer(case._post_teardown)

pelme سأكون سعيدًا بإنشاء

ال 6 كومينتر

معذرةً ، لا تعمل تركيبات الأطباء والاختبارات (التي تُستخدم لتجهيز قاعدة البيانات للاستخدام) جيدًا معًا. رسالة الخطأ مضللة ، ولكن إجراء عمليات قاعدة البيانات داخل العقيدة لا يدعمه pytest-django.

المبادئ التي تم استدعاؤها من عداء اختبار Django لم تنظف قاعدة البيانات AFAIK أبدًا ، وبدءًا من Django 1.6 ، لا يقوم عداء الاختبار الخاص بـ Django تلقائيًا بتشغيل العقيدة ، وبالتالي فهو ليس شيئًا من المحتمل أن يكون مدعومًا بشكل مباشر من قبل pytest-django أيضًا.

أعتقد أن أفضل رهان لك هو إعادة كتابة عقيدة واحدة إلى حالة اختبار عادية.

تضمين التغريدة

لقد وجدت أن التركيب التالي يسمح بالوصول إلى db في أطبائي

@pytest.fixture
def db_doctest(request, _django_cursor_wrapper):
    from django.test import TestCase as django_case
    _django_cursor_wrapper.enable()
    request.addfinalizer(_django_cursor_wrapper.disable)
    case = django_case(methodName='__init__')
    case._pre_setup()
    request.addfinalizer(case._post_teardown)

pelme سأكون سعيدًا بإنشاء

تضمين التغريدة
نعم ، أعتقد أنه سيكون أمرًا جيدًا ، ولكن يجب أن يتم تغطيتها بالاختبارات بالطبع.
شكرا للتعمق في هذا واقتراح حل!

phlax كيف تستخدم هذه المباراة؟ أعني ، ما هو الرمز الذي يتم وضعه في ملف دكتست؟

alanjds آسف ، لقد استغرق الأمر 3 سنوات للإجابة 8 / - لاحظت للتو السؤال عندما كنت أعيد اكتشاف الحل.

يمكنك تضمين تركيبات في العقيدة على سبيل المثال

>>> get_fixture('db_doctest')

لكن الحل أعلاه قد تغير أيضًا - يبدو أن هذا كافٍ لأداة العقيدة:

import pytest

@pytest.fixture
def db_doctest(db):
    pass

اعتبارًا من يوليو 2020 ، سيكون getfixture('db') في الجزء العلوي من أعمال الطبيب.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات