Django + tox:应用程序尚未加载
Django + tox: Apps aren't loaded yet
我正在迁移 Django 项目以使用 Tox 和 pytest。当 运行 tox.
时,我得到以下信息
_________________________________________ ERROR collecting fixtureless/tests/test_django_project/test_app/tests/test_factory.py _________________________________________
fixtureless/tests/test_django_project/test_app/tests/test_factory.py:10: in <module>
from test_app.models import ModelOne, ModelTwo
fixtureless/tests/test_django_project/test_app/models.py:11: in <module>
class ModelOne(models.Model):
.tox/py36-django21/lib/python3.6/site-packages/django/db/models/base.py:87: in __new__
app_config = apps.get_containing_app_config(module)
.tox/py36-django21/lib/python3.6/site-packages/django/apps/registry.py:249: in get_containing_app_config
self.check_apps_ready()
.tox/py36-django21/lib/python3.6/site-packages/django/apps/registry.py:132: in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
E django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
这是我的 tox 文件。
[tox]
skipsdist = true
envlist =
py{36,37}-django21,
py{36,37}-django22,
# Add environment to use the default python3 installation
[testenv]
setenv =
PYTHONDONTWRITEBYTECODE=1
PYTHONPATH = {toxinidir}:{toxinidir}/fixtureless/tests/test_django_project
DJANGO_SETTINGS_MODULE = settings.postgres
deps =
pillow
psycopg2
pytest
django21: Django>=2.1,<2.2
django22: Django>=2.2,<2.3
commands = pytest
好像 django.setup()
没有被调用什么的。我对毒素还很陌生。任何帮助将不胜感激。
这是一个开源项目 (django-fixtureless) and I have been successfully running the Django test suite using the instructions outlined here。
Django 不知道如何 运行 pytest
风格的测试函数。 Plain pytest
也不提供 django 集成。您可以
写一个自定义测试运行ner(一个最小的例子):
# myapp/runner.py
class PytestRunner:
def run_tests(self, test_labels):
import pytest
return pytest.main(test_labels)
并将您的应用配置为使用它而不是默认 DiscoverRunner
:
# myapp/settings.py
TEST_RUNNER = 'myapp.runner.PytestRunner'
现在 python manage.py test
将调用 pytest
而不是默认的 unittest
。
或使用pytest-django
插件。将其添加到 deps
:
deps =
...
pytest
pytest-django
...
这本身不提供与 manage.py test
的集成,但您将能够像往常一样通过 pytest
:
调用测试
$ pytest --ds=myapp.settings
...
该插件还提供了许多重新实现 Django 测试助手(如 RequestFactory
、Client
等)的有用装置,因此您可以完成 unittest
式测试的完整端口 类 到 pytest
风格的测试函数。有关配置详细信息和代码示例,请参阅 pytest-django
docs。
我正在迁移 Django 项目以使用 Tox 和 pytest。当 运行 tox.
时,我得到以下信息_________________________________________ ERROR collecting fixtureless/tests/test_django_project/test_app/tests/test_factory.py _________________________________________
fixtureless/tests/test_django_project/test_app/tests/test_factory.py:10: in <module>
from test_app.models import ModelOne, ModelTwo
fixtureless/tests/test_django_project/test_app/models.py:11: in <module>
class ModelOne(models.Model):
.tox/py36-django21/lib/python3.6/site-packages/django/db/models/base.py:87: in __new__
app_config = apps.get_containing_app_config(module)
.tox/py36-django21/lib/python3.6/site-packages/django/apps/registry.py:249: in get_containing_app_config
self.check_apps_ready()
.tox/py36-django21/lib/python3.6/site-packages/django/apps/registry.py:132: in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
E django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
这是我的 tox 文件。
[tox]
skipsdist = true
envlist =
py{36,37}-django21,
py{36,37}-django22,
# Add environment to use the default python3 installation
[testenv]
setenv =
PYTHONDONTWRITEBYTECODE=1
PYTHONPATH = {toxinidir}:{toxinidir}/fixtureless/tests/test_django_project
DJANGO_SETTINGS_MODULE = settings.postgres
deps =
pillow
psycopg2
pytest
django21: Django>=2.1,<2.2
django22: Django>=2.2,<2.3
commands = pytest
好像 django.setup()
没有被调用什么的。我对毒素还很陌生。任何帮助将不胜感激。
这是一个开源项目 (django-fixtureless) and I have been successfully running the Django test suite using the instructions outlined here。
Django 不知道如何 运行 pytest
风格的测试函数。 Plain pytest
也不提供 django 集成。您可以
写一个自定义测试运行ner(一个最小的例子):
# myapp/runner.py class PytestRunner: def run_tests(self, test_labels): import pytest return pytest.main(test_labels)
并将您的应用配置为使用它而不是默认
DiscoverRunner
:# myapp/settings.py TEST_RUNNER = 'myapp.runner.PytestRunner'
现在
python manage.py test
将调用pytest
而不是默认的unittest
。或使用
pytest-django
插件。将其添加到deps
:deps = ... pytest pytest-django ...
这本身不提供与
调用测试manage.py test
的集成,但您将能够像往常一样通过pytest
:$ pytest --ds=myapp.settings ...
该插件还提供了许多重新实现 Django 测试助手(如
RequestFactory
、Client
等)的有用装置,因此您可以完成unittest
式测试的完整端口 类 到pytest
风格的测试函数。有关配置详细信息和代码示例,请参阅pytest-django
docs。