PyCharm, Django: покрытие с нулевым кодом
PyCharm имеет действие "Беги с покрытием" для тестовых целей Django. Это запускает тесты, но показывает нулевое тестовое покрытие (0% файлов, не покрытых на панели проекта, и все красные в редакторе). Установка или снятие флажка "Использовать комплектное покрытие.py" не имеет значения.
Запуск тех же тестов из CLI дает ожидаемые результаты:
$ coverage --version
Coverage.py, version 3.5.1. http://nedbatchelder.com/code/coverage
$ coverage run ./manage.py test blackbox
Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.002s
OK
Destroying test database for alias 'default'...
$ coverage report
Name Stmts Miss Cover
---------------------------------------------
__init__ 0 0 100%
blackbox/__init__ 0 0 100%
blackbox/models 5 0 100%
blackbox/rules/__init__ 1 0 100%
blackbox/rules/board 62 19 69%
blackbox/tests 49 6 88%
manage 11 4 64%
settings 24 0 100%
---------------------------------------------
TOTAL 152 29 81%
Что может вызвать это?
4 ответа
Если вы получите доступ к своему проекту через любую символическую ссылку в пути, отображение покрытия не будет выполнено.
Попробуйте открыть тот же проект через реальный путь, и вы получите правильное поведение.
https://youtrack.jetbrains.com/issue/PY-17616
PS: Обновление старого вопроса, так как ошибка все еще не исправлена.
У меня была похожая проблема, связанная с использованием PyCharm.
Тесты были в порядке, но результаты покрытия не были загружены, "0%" или "не покрыты" везде.
В консоли PyCharm была зарегистрирована ошибка, хотя после результатов тестов это было связано с cover.py:
/System/Library/Frameworks/Python.framework/Versions/2.6/bin/python
"/Applications/PyCharm 2.5 EAP.app/helpers/run_coverage.py"
run "--omit=/Applications/PyCharm 2.5 EAP.app/helpers" bin/test
Creating test database for alias 'default'...
................................
----------------------------------------------------------------------
Ran xx tests in xxs
OK
No source for code: '/path/file.py' (<- error)
Process finished with exit code 0
Мое решение состояло в том, чтобы запустить включенный cover.py с возможностью игнорировать ошибки: "-i".
Я отредактировал пакетный файл "run_coverage.py", вы можете увидеть его расположение в выводе консоли и добавить опцию "-i" в последнюю строку:
main(["xml", "-o", coverage_file + ".xml"])
чтобы:
main(["xml", "-i", "-o", coverage_file + ".xml"])
Это сработало для меня, ошибка игнорируется и все данные покрытия теперь загружаются в пользовательский интерфейс.
Если использование "-i" решит проблему на вашей стороне, лучшим решением будет исправить ошибки, но до тех пор вы будете видеть результаты покрытия.
У меня была похожая проблема. Я закончил генерировать данные XML с помощью nosetests --cover-xml
, но вы также можете сгенерировать xml из предыдущего запуска. coverage xml
Затем этот отчет можно удобно загрузить в PyCharm/IDEA с помощью кнопки "Анализ" -> "Показать данные покрытия… -> +" и выбора файла XML.
Я также пытался решить эту проблему в Ubuntu.
На данный момент я попытался использовать как apt-get Python, так и стек Enthought Canopy, но безуспешно. В Windows, однако, это работает (используя Canopy).
Я использовал следующий код:
# in a.py
class A(object):
def p(self, a):
return a
# in test_a.py
from unittest import TestCase, main
from a import A
class TestA(TestCase):
def test_p(self):
inst = A()
val = inst.p("a")
self.assertEqual("a", val)
if _name_ == "__main__":
main()