我正在迁移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]
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),我已经按照here概述的说明成功运行了Django测试套件。
答案 0 :(得分:2)
Django不知道如何运行pytest
样式的测试函数。纯pytest
也不提供Django集成。您可以
编写一个自定义测试运行器(一个最小的示例):
# 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
样式的测试类的完整端口移植到{ {1}}型测试功能。有关配置的详细信息和代码示例,请参见pytest
docs。