Жаль, что Django решил игнорировать пользовательские приложения в INSTALLED_APPS, которые не находятся в дереве проекта. См. Это сообщение https://groups.google.com/forum/#!topic/django-users/gGfVhfrfE10 за их рассуждения.
Мое реальное дело, конечно, не относится к трем упомянутым вариантам использования (большой сюрприз!): У нас есть сайт, который мы развертываем с помощью другой коллекции тесно связанных пользовательских приложений для клиента/группы клиентов. Мы не делаем хотим, чтобы эти приложения были вложены под деревом проекта, потому что каждый из них находится в своем собственном репозитории git. В прошлом мы использовали git-подмодули, поддельные подмодули и поддеревья; у всех были проблемы в нашей установке. С другой стороны, каждое приложение как собственный пакет на том же уровне, что и сайт, удовлетворяет большинству наших требований.
Конечно, у каждого приложения есть свои собственные тесты, но я хотел бы иметь возможность запускать полный набор тестов (включая сайт и все пользовательские приложения) для каждого конкретного сайта, созданного по-разному.
Наш обходной путь заключается в следующем:
В settings/test.py
у меня есть:
ATA_BLACKLIST = ['scary_mod1', 'scary_mod2']
ADD_TEST_APPS = [i for i in INSTALLED_APPS
if '.' not in i and i not in ATA_BLACKLIST]
ATA_STR = " ".join(ADD_TEST_APPS)
У меня есть run_tests.sh
сценарий на высшем уровне, который выглядит более или менее, как это:
#!/bin/bash
MYDIR=`dirname $0`
cd $MYDIR
DJANGO_SETTINGS_MODULE=kmxng.settings.test
ATA_STR=`python -c "from django.conf import settings; print settings.ATA_STR"`
coverage run --omit "*lib/python*" ./manage.py test . $ATA_STR
coverage report
Короче говоря, в моих тестовых настройках я генерирую список дополнительных модулей, которые необходимо добавить к тестированию. Я вызываю команду django test
с этим списком в дополнение к по умолчанию .
.
(я взглянуть на переопределение DiscoverRunner
-.. Она имеет относительно длинный build_suite
метод, который может быть преодолено Работа вокруг выше, является менее инвазивным вариант)
Хорошо ... позвольте мне немного измените вопрос. Каков наилучший способ запуска всех тестов с использованием нового тестового бегуна? – Luke
@ Luke вы можете передать 'django.contrib' в качестве аргумента тестовой команды, как объясняется в моем обновленном ответе. Но это не будет запускать ** все ** приложения. –
Спасибо, Николас. Хотя то, что я пытался решить с моим вопросом, - как запустить все тесты из всех моих приложений? запуск 'python manage.py test myproject' продолжает запускать для меня 0 тестов. Это только моя конфигурация? – Luke