Django тестовый бегун не работает с нестандартной структурой проекта - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть Django проект со слегка нестандартной структурой (показан ниже), а тестовый прогон Django не работает.

root_dir
  ├ src
  |  ├ myapp_dir (apps.py, etc.)
  |  ├ project_files_dir (settings.py, wsgi.py, etc.)
  |  ├ utils_dir, etc.
  |  └ manage.py
  ├ tests
  |  ├ test_settings.py
  |  └ myapp_tests_dir (tests1.py, tests2.py, etc.)
  ├ setup.py
  └ runtests.py

apps.py содержит:

from django.apps import AppConfig

class MyAppConfig(AppConfig):
    name = 'myapp'

settings.py включает в себя INSTALLED_APPS = [..., myapp]

test_settings.py включает в себя INSTALLED_APPS = [..., myapp, tests]

setup.py содержит: из os.path имя_порта импорта, присоединение

from setuptools import find_packages, setup

root = dirname(__file__)

with open(join(root, "README.md")) as readme:
    README = readme.read()

try:
    with open(join(root, "VERSION")) as version_file:
        version = version_file.read().strip()
except IOError:
    version = "0.0.1"

setup(
    name="myapp-name",
    version=version,
    packages=find_packages("src"),
    package_dir={"": "src"},
    include_package_data=True,
    description="MyApp description",
    long_description=README,
    author="My Name",
    author_email="my@email.com",
    url="https://",
    install_requires=["celery", "django", "requests"],
)

runtests.py содержит:

import os
import sys

import django
from django.conf import settings
from django.test.utils import get_runner

if __name__ == "__main__":
    os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings'
    django.setup()
    TestRunner = get_runner(settings)
    test_runner = TestRunner()
    failures = test_runner.run_tests(["tests"])
    sys.exit(bool(failures))

Когда я запускаю тесты с python runtests.py, я получаю ModuleNotFoundError: No module named 'myapp'

Если попытаться изменить test_settings.py, чтобы включить INSTALLED_APPS = [..., src.myapp, tests] Затем я получаю django.core.exceptions.ImproperlyConfigured: Cannot import 'myapp'. Check that 'src.myapp.apps.MyAppConfig.name' is correct.

Вероятно, также стоит упомянуть, что runserver отлично работает из рабочего каталога root_dir при его вызове так:

> python src/manage.py runserver

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
April 22, 2020 - 16:06:19
Django version 3.0.5, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C
...