Как правильно проверить покрытие с помощью Django + Nose

В настоящее время проект настроен для запуска покрытия с помощью команды управления Django следующим образом:

./manage.py test --with-coverage --cover-package=notify --cover-branches --cover-inclusive --cover-erase

Это приводит к отчету, подобному следующему:

Name                        Stmts   Miss Branch BrMiss  Cover   Missing
--------------------------------------------------------------------------
notify.decorators               4      1      0      0    75%   4
notify.handlers                 6      1      2      0    88%   11
notify.notification_types      46     39      2      0    19%   8-55, 59, 62, 66
notify.notifications           51     51      0      0     0%   11-141
--------------------------------------------------------------------------
TOTAL                         107     92      4      0    17%   

Однако есть проблема с этим отчетом. Это не правильно. Покрытие - это маркировка отсутствующих линий, несмотря на то, что они действительно проходят тестирование. Например, если я запускаю тесты черезnosetests вместо команды управления django я получаю следующий правильный отчет:

Name                        Stmts   Miss Branch BrMiss  Cover   Missing
-----------------------------------------------------------------------------
notify.decorators               4      0      0      0   100%   
notify.handlers                 6      0      2      0   100%   
notify.notification_types      46      0      2      0   100%   
notify.notifications           51     25      0      0    51%   13, 18, 23, 28, 33, 38, 43, 48, 53, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 116, 121, 126, 131, 136, 141
-----------------------------------------------------------------------------
TOTAL                         107     25      4      0    77%   

Google привел меня к часто задаваемым вопросам на сайте покрытия,http://nedbatchelder.com/code/coverage/faq.html

В: Почему тела функций (или классов) отображаются как выполненные, а строки def - нет?

Это происходит потому, что покрытие начинается после определения функций. Строки определения выполняются без измерения покрытия, затем начинается покрытие, затем вызывается функция. Это означает, что тело измеряется, но определение самой функции - нет.

Чтобы это исправить, начните покрытие раньше. Если вы используете командную строку для запуска вашей программы с покрытием, то вся ваша программа будет отслеживаться. Если вы используете API-интерфейс, вам необходимо вызвать функцию cover.start () перед импортом модулей, которые определяют ваши функции.

Вопрос в том, могу ли я правильно запустить отчеты о покрытии с помощью команды управления Django? Или мне нужно обходить управление, чтобы избежать ситуации, когда покрытие запускается после выполнения «пропущенных» строк?

Ответы на вопрос(5)

Ваш ответ на вопрос