Лучший способ создания примера проекта в тестовом наборе django plugin
Это может быть простой вопрос, но я не могу разобраться в нем.
Если я создаю приложение-плагин 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, вы можете использовать pytest_configure()
в conftest.py
для установки "псевдо" среды 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
env, и самое лучшее: ** Вам не нужен полный фиктивный проект Django`
Это не поможет, если вам нужно протестировать функции проекта, такие как загрузка модулей и т.д. Но для простых юнит-тестов это работает отлично.