Тест покрытия Django для URL-адресов 0%, почему?

Использование Носа Джанго. У меня есть тесты для моих URL-адресов, но покрытие по-прежнему дает мне 0% для URL-адресов, почему?

тестовые профили python manage.py

Это мое покрытие:

Name                               Stmts   Miss  Cover   Missing
----------------------------------------------------------------
profiles                               0      0   100%
profiles.migrations                    0      0   100%
profiles.migrations.0001_initial       6      0   100%
profiles.models                        0      0   100%
profiles.urls                          4      4     0%   1-9
----------------------------------------------------------------
TOTAL                                 10      4    60%
----------------------------------------------------------------

Это один из моих тестов URL...

url_tests.py

import nose.tools as noz
from django.test import TestCase
from django.core.urlresolvers import resolve, reverse

class URLsTest(TestCase):

    def test_user_list(self):
        url = reverse('api_user_list', args=[])
        noz.assert_equal(url, '/api/user/')

person Prometheus    schedule 17.09.2014    source источник
comment
Не видя больше вашей кодовой базы, я не уверен, что смогу помочь; Я могу подтвердить, что перемещение одного из моих проектов (на Django 1.6) для использования django-nose, запуск теста python manage.py --with-coverage и наличие теста, который проверяет URL-адреса, приводит к правильным отчетам о покрытии для моего urls.py; так что, вероятно, это как-то связано с вашим кодом/использованием, в частности.   -  person James Aylett    schedule 25.09.2014


Ответы (1)


Обычно это связано с слишком поздним запуском cover.py. Самый простой способ убедиться, что он запускается достаточно рано, — это запустить средство запуска тестов с покрытием:

$ coverage run nosetests.py ....

Одна важная деталь urls.py: он содержит только код, который выполняется при импорте. Таким образом, весь файл выполняется, когда Django запускается и импортирует urls.py. Это отличается от большинства файлов, которые определяют классы или функции, тела которых выполняются позже.

person Ned Batchelder    schedule 18.09.2014
comment
Я использую Django Nose. Однако, почему другие тесты будут в порядке, а не этот? Независимо от порядка, он должен сообщить что-то, если только я не делаю тестирование URL-адресов неправильно. - person Prometheus; 21.09.2014
comment
Покрытие может измерять только код, который выполняется после запуска покрытия. Если Django Nose импортирует (и, следовательно, выполняет) urls.py до того, как запустит Cover.py, вы увидите 0% сообщений для urls.py. - person Ned Batchelder; 26.09.2014
comment
Пробовали ли вы запускать свои тесты под покрытием, как я показал в ответе? - person Ned Batchelder; 26.09.2014
comment
@Sputnik ваш тест показывает, что ваш urls.py был импортирован и обработан, но не использует напрямую какой-либо код в urls.py ... как сказал Нед, вполне вероятно, что Django уже обработал ваш urls.py до того, как бегун теста начинает измерять покрытие - person Anentropic; 26.09.2014
comment
@NedBatchelder У меня установлено покрытие командой, покрытие недоступно - person Prometheus; 29.09.2014