0

我正在尝试在我的 Django 应用程序中测试抽象基础模型的一些功能。我一直在阅读如何进行这些测试,每个人似乎都说我需要创建一个测试模型。

所以我已经这样做了,我创建了一个名为的目录my_app/tests并在其中创建了一个models.py。我的测试模型在哪里UniqueSlugTestModel

现在我想我需要在测试应用程序上调用makemigrations和。migrate所以我将我的新测试应用程序添加到测试中的设置并调用迁移。但由于某种原因,makemigrationsmigrate没有看到该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?

4

0 回答 0