我正在尝试在我的 Django 应用程序中测试抽象基础模型的一些功能。我一直在阅读如何进行这些测试,每个人似乎都说我需要创建一个测试模型。
所以我已经这样做了,我创建了一个名为的目录my_app/tests
并在其中创建了一个models.py
。我的测试模型在哪里UniqueSlugTestModel
。
现在我想我需要在测试应用程序上调用makemigrations
和。migrate
所以我将我的新测试应用程序添加到测试中的设置并调用迁移。但由于某种原因,makemigrations
并migrate
没有看到该my_app.tests
应用程序不在设置中。为什么他们查看的设置与我在测试中覆盖的实时设置不同?
这是在 Django 中测试抽象模型的最佳方法吗?如何让管理命令查看被覆盖的设置?
from django.conf import settings
from django.core.management import call_command
from django.test import TestCase
from django.test import override_settings
from my_app.tests.models import UniqueSlugTestModel
class UniqueSlugModelTestCase(TestCase):
@override_settings(INSTALLED_APPS=settings.INSTALLED_APPS + ['my_app.tests'])
def setUp(self):
print(settings.INSTALLED_APPS)
call_command('makemigrations', 'my_app.tests', interactive=False)
call_command('migrate', 'my_app.tests', interactive=False)
@override_settings(INSTALLED_APPS=settings.INSTALLED_APPS + ['my_app.tests', ])
def tearDown(self):
call_command('migrate', 'my_app.tests', 'zero', interactive=False)
@override_settings(INSTALLED_APPS=settings.INSTALLED_APPS + ['my_app.tests', ])
def test_auto_slug_creation(self):
c1 = UniqueSlugTestModel(name='Company 1')
c1.save()
c1.refresh_from_db()
self.assertEqual(c1.slug, 'company-1')
@override_settings(INSTALLED_APPS=settings.INSTALLED_APPS + ['my_app.tests', ])
def test_unique_slug_generation(self):
usm = UniqueSlugTestModel(name='Company 1')
usm.save()
usm.refresh_from_db()
usm2 = UniqueSlugTestModel(name='Company 1')
usm2.save()
usm2.refresh_from_db()
self.assertNotEqual(usm.slug, usm2.slug)
print(settings.INSTALLED_APPS)
打印出我所有已安装的应用程序,包括我my_app.tests
在其中添加的应用程序。
但它失败了App 'my_app.tests' could not be found. Is it in INSTALLED_APPS?