لقد لاحظت المشكلة أدناه عند استخدام سير العمل المقدم هنا: https://pytest-django.readthedocs.io/en/latest/database.html#example -work-flow-with-reuse-db-and-create-db. يبدو أن السلوك تغير في إصدار حديث على الرغم من أنه من الممكن أنني لم ألاحظ حدوث ذلك مطلقًا.
عندما أقوم بإجراء الاختبارات التي اجتازت العلامة --create-db
، يتم إعادة إنشاء قاعدة البيانات وتشغيل عمليات الترحيل (لاحظ الوقت). ومع ذلك ، تم إسقاط قاعدة البيانات على الرغم من تمرير العلم --reuse-db
عبر addopts
.
$ pytest tests/app --create-db
...............................................................................................................................
127 passed in 8.23 seconds
عندما أقوم بتشغيل الاختبارات بعد ذلك بدون العلامة --create-db
، يتم إعادة إنشاء قاعدة البيانات مرة أخرى ويتم تشغيل عمليات الترحيل لأنه تم إسقاطها مسبقًا.
$ pytest tests/app
...............................................................................................................................
127 passed in 7.01 seconds
إذا أجريت الاختبارات للمرة الثالثة تمامًا كما هو مذكور أعلاه ، فسيتم إعادة استخدام قاعدة البيانات بشكل صحيح:
$ pytest tests/app
...............................................................................................................................
127 passed in 1.12 seconds
لقد ألقيت نظرة على الكود ويمكنني أن أرى تغييرًا منطقيًا طفيفًا في مُعاد بناء حديث (# 362) يتسبب في ذلك.
كان المنطق في django_db_setup
هو:
if not request.config.getvalue('reuse_db'):
request.addfinalizer(teardown_database)
الآن هو:
if not django_db_keepdb:
request.addfinalizer(teardown_database)
حيث تكون تركيبات django_db_keepdb
request.config.getvalue('reuse_db') and not request.config.getvalue('create_db')
.
إنها ليست صفقة ضخمة ولكنها تجعل المستندات هنا غير صحيحة ولكنها مضللة بعض الشيء حيث تم إنشاء قاعدة البيانات مرتين.
شكرا لتعقبه! يجب أن نصلح هذا ونعيد السلوك القديم بالتأكيد.
pelme هل يمكنك دمج طلب السحب من dekkers ؟ يبدو أنه يصلح هذه المشكلة.
آسف ، هذا ليس طلب سحب. الإصلاح لا يزال يبدو أنه صالح.
العلاقات العامة هنا: https://github.com/pytest-dev/pytest-django/pull/476
التعليق الأكثر فائدة
لقد ألقيت نظرة على الكود ويمكنني أن أرى تغييرًا منطقيًا طفيفًا في مُعاد بناء حديث (# 362) يتسبب في ذلك.
كان المنطق في
django_db_setup
هو:الآن هو:
حيث تكون تركيبات
django_db_keepdb
request.config.getvalue('reuse_db') and not request.config.getvalue('create_db')
.إنها ليست صفقة ضخمة ولكنها تجعل المستندات هنا غير صحيحة ولكنها مضللة بعض الشيء حيث تم إنشاء قاعدة البيانات مرتين.