我有一个 django 1.6 项目,它的测试覆盖率很低
当我跑步时
bash
coverage run manage.py test mainapp
coverage report --include=mainapp/*
输出为
Name Stmts Miss Cover
--------------------------------------
mainapp/__init__ 0 0 100%
mainapp/models 42 13 69%
mainapp/tests 20 0 100%
--------------------------------------
TOTAL 62 13 79%
然而,这是非常具有误导性的,因为覆盖范围现在接近于此,甚至不包括views.py
文件。
另外,如果我只是运行coverage report
它会显示使用requirements.py
文件创建的 virtualenv 中 site-packages
目录的覆盖范围,
整个项目 https://github.com/vinu76jsr/librarymanagementsystem
在我的项目中,我需要在manage.py
中添加一个--setting
,在您的情况下:
coverage run manage.py test --settings=librarymanagementsystem.settings mainapp
coverage report --include=mainapp/*
对于 report 命令,必须--include
以避免将站点包目录包含在覆盖范围中。
如果使用South
,则还应添加--omit="*migrations*"
。
要在覆盖率报告中添加视图,您需要对其进行测试!在mainapp
目录中添加一个test_view.py
:
from django.test import TestCase
class TestCalls(TestCase):
def test_call_view_denies_anonymous(self):
response = self.client.get('/', follow=True)
self.assertRedirects(response, '/login/google/?next=%2F')
[...]
这也将添加您的urls.py
:
$ coverage report --include=./*
Name Stmts Miss Cover
------------------------------------------------------
librarymanagementsystem/__init__ 0 0 100%
librarymanagementsystem/settings 34 0 100%
librarymanagementsystem/urls 6 0 100%
mainapp/__init__ 0 0 100%
mainapp/admin 11 0 100%
mainapp/models 42 13 69%
mainapp/test_view 5 0 100%
mainapp/tests 20 0 100%
mainapp/views 61 35 43%
manage 6 0 100%
------------------------------------------------------
TOTAL 186 48 74%
注意:您不应该直接使用unittest
,而应该使用django.test
。 请参阅文档(第一个警告)