0

我有一个测试覆盖率最低的 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文件。

另外,如果我只是运行它,它会显示使用文件创建的 virtualenvcoverage report中目录的覆盖范围,site-packagesrequirements.py

完整的项目位于https://github.com/vinu76jsr/librarymanagementsystem

4

2 回答 2

0

--setting在我的项目中,我需要manage.py在您的情况下添加一个:

coverage run manage.py test --settings=librarymanagementsystem.settings mainapp
coverage report --include=mainapp/*

对于报告命令,--include必须避免将站点包目录包含在覆盖范围内。

如果你使用South,你也应该添加--omit="*migrations*"

于 2014-04-06T11:45:23.547 回答
0

要在覆盖率报告中添加视图,您需要对其进行测试!test_view.py在您的mainapp目录中添加一个:

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见文档(第一次警告)

于 2014-04-06T13:12:00.277 回答