在 Django 插件测试套件中创建示例项目的最佳方式

best way to create example project in a django plugin test suite

这可能是一个简单的问题,但我无法理解它。 鉴于我制作了一个 Django 插件应用程序,让我们将其命名为 foo,它添加了一些其他应用程序可以使用的数据库功能(例如,必须继承的模型),我想为该应用程序添加测试。 结构:

foo/
  apps.py
  models.py
tests/
  test_foo_basic.py
  test_bar.py
  ...
setup.py
README.md
...

该项目不是完整的 Django 应用程序,因为它是其他人的插件 app。所以我需要在测试目录中创建一个 fake Django 项目,至少有一个应用程序,它定义了一些继承自 foo.models.<some_model> 的模型并测试它,对吗?

这是唯一的方法吗?这对我来说似乎很重要。

如果是这样,给我一个“是这样”的答案就可以了。我会接受 ;-) 如果没有,请告诉我我很复杂并给我看一些更简单的东西,pytest 插件等? 为了测试,我需要一个

经过一番努力,我发现了自己。

根据pytest-django docs,您可以在conftest.py中使用pytest_configure()为这种情况设置一个“伪”Django环境:

# conftest.py

import django
from django.conf import settings


def pytest_configure():
    settings.configure(
        DATABASES={
            "default": {
                "ENGINE": "django.db.backends.sqlite3",
                "NAME": ":memory:",
            }
        },
        INSTALLED_APPS=[
            "django.contrib.auth",
            "django.contrib.contenttypes",
            "django.contrib.sessions",
            "django.contrib.messages",
            "django.contrib.staticfiles",
            "django.contrib.sites",
            "your.app"
        ],
    )
    django.setup()

这样,你不需要 pytest.ini,不需要 DJANGO_SETTINGS_MODULE 环境,最好的是:** 你不需要完整的虚拟 Django 项目`

如果您需要测试模块加载等项目功能,它无济于事。但是对于简单的单元测试,这非常有效。