PyCharm, Django: нулевой охват кода
PyCharm имеет действие "Run with Coverage" для целевых объектов Django. Это запускает тесты, но показывает нулевое покрытие (0% файлов, не охваченных в области проекта, и всех красных в редакторе). Проверка или снятие флажка "Использовать в комплекте cover.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%
Что может быть причиной этого?
Ответы
Ответ 1
Если вы получаете доступ к проекту через любую символическую ссылку на пути, экран покрытия не будет выполнен.
Попробуйте открыть тот же проект через реальный путь, и вы получите правильное поведение.
https://youtrack.jetbrains.com/issue/PY-17616
PS: Обновление старого вопроса, поскольку ошибка все еще не исправлена.
Ответ 2
У меня была аналогичная проблема с использованием пакета 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" решить проблему на вашей стороне, лучшим решением будет исправить ошибки, но до тех пор вы увидите результаты покрытия.
Ответ 3
Я также пытался решить эту проблему в 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()
Ответ 4
У меня была аналогичная проблема. Я закончил создание xml-данных с помощью nosetests --cover-xml
, но вы также можете сгенерировать xml из предыдущего сеанса coverage.py с coverage xml
Затем этот отчет можно удобно загрузить в PyCharm/IDEA с помощью кнопки Analyze → Show Coverage Data... → + и выбрать файл xml.