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
и если у вас есть код, который возвращает какие-то данные конфигурации, я бы порекомендовал создать новый библиотечный модуль с функциями, которые будут возвращать данные конфигурации в ваши тесты