Python - Нос не обнаруживает тесты уровня пакета в Django

Я настраиваю структуру каталогов для моего приложения Django, чтобы разделить функциональные и модульные тесты. Я использую нос в качестве тест-бегуна для моего проекта Django.

В корне проекта Django у меня есть папка с именем "tests", которая имеет такую ​​структуру:

tests
├── __init__.py
├── functional
│   ├── __init__.py
└── unit
    ├── __init__.py
    ├── data.py
    ├── tests.py

Если я хочу запустить только модульные тесты, я не смогу использовать следующее из корня проекта:

$ nosetests tests.unit

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

Как вы можете видеть, в файле tests.py он не находит тесты.

Однако, когда я запускаю с использованием структуры каталогов, тесты обнаруживаются так, как они должны быть:

$ nosetests tests/unit/
E
# .. Some errors I expected because settings are not initialized when called this way
-----------------
Ran 1 test in 0.001s

FAILED (errors=1)

Что мне не хватает? Моя главная проблема в том, что у меня есть setup функция в tests.unit.__init__.py это необходимо для создания данных в тестовой БД для предстоящих тестов.

Спасибо

1 ответ

Решение

Все зависит от того, какой код в tests/unit/__init__.py

Когда ты сказал

nosetests tests.unit

Вы указываете на unit/__init__.py не каталог unit/ Таким образом, если у вас не было тестов в вашем __init__.py модуль тогда ничего не запустит. Поэтому понятно, когда вы говорите, что использовали путь к каталогу, а затем ваши тесты начали работать.

Вы упоминаете

Что мне не хватает? Моя главная проблема заключается в том, что у меня есть функция настройки в tests.unit.init.py, который следует вызывать для создания данных в тестовой БД для предстоящих тестов.

Вполне вероятно, что, хотя у вас есть функция настройки в __init__.py возможно, вы никогда не импортировали свои тестовые функции в __init__.py

Одним из быстрых решений было бы добавить эту строку в __init__.py

from tests.unit.tests import *

Тем не менее, на самом деле не очень разумно помещать какой-либо код в __init__.py и если у вас есть код, который возвращает какие-то данные конфигурации, я бы порекомендовал создать новый библиотечный модуль с функциями, которые будут возвращать данные конфигурации в ваши тесты

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