Pytest Django обнаруживает приспособление, но говорит «не найдено» в бегах

У меня есть проект, в котором каждое приложение имеет модуль tests, как показано ниже:

app1/
  tests/
    __init__.py
    # whatever test files are
app2/
  tests/
    __init__.py
    # whatever test files are

А также, как вы можете догадаться, иметь пакет проекта в корне проекта. У него есть подпакет testing, который содержит базовые тестовые примеры для моделей и полей и, конечно же, фикстуры, как показано ниже:

myproject/
  __init__.py
  # settings and related files, you know
  testing/
    __init__.py
    fixtures.py  # for fixtures
    # other modules for base test classes and stuff

Итак, общая структура моего проекта:

myproject/  # contains standard django stuff and a testing subpackage
app1/  # contains app and tests
app2/  # so as above
# so on and so forth

А содержимое pytest.ini в корне проекта выглядит следующим образом:

[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings.development
python_files =
    test_*.py
    myproject/testing/fixtures.py
addopts = -s
console_output_style = count
log_cli_level = DEBUG
log_print = True

Итак, предположим, что myproject/testing/fixtures.py содержит фикстуру, как показано ниже:

# assuming i've imported related stuff

@pytest.fixture  # might have different scope
def foo():
    """does foo"""
    return "foo"

А позже я делаю pytest --fixtures, чтобы убедиться, что pytest правильно обнаруживает мое приспособление, а это значит, что проблем быть не должно.

Однако, когда я запускаю тесты в проекте, я получаю следующую ошибку:

E       fixture 'foo' not found

Это странно, так как я ясно вижу это в pytest --fixtures. Я понятия не имею, почему это происходит или что вызывает это.


Окружающая обстановка

  • Питон 3.7.3
  • Питест 4.4.0
  • pytest-django 3.4.8
  • Джанго 2.2

Добавьте conftest.py в корневой каталог со строкой pytest_plugins = ['myproject.testing.fixtures']. Параметр pytest_files предназначен для обнаружения тестов, поэтому, хотя он также обнаруживает фикстуры, нет гарантии, что фикстура будет импортирована достаточно рано, чтобы соответствовать аргументу теста.

hoefling 07.04.2019 11:47

Спасибо, кажется, это помогло. Пожалуйста, предоставьте его в качестве ответа, чтобы я мог принять его как действительный, и сотрудники Google также имеют представление об этом.

Eray Erdin 07.04.2019 12:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
609
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас есть фикстуры, которые должны храниться в отдельном модуле и быть доступными для всего набора тестов, лучше всего зарегистрировать модуль как плагин, чтобы обеспечить его загрузку до фазы сбора тестов. Создайте файл с именем conftest.py в корневом каталоге проекта с содержимым

pytest_plugins = ['myproject.testing.fixtures']

Конечно, вы можете просто использовать conftest.py вместо fixtures.py и поместить туда светильники.

Другие вопросы по теме