我以以下方式使用覆盖率来测试我的django应用程序:
DJANGO_SETTINGS_MODULE=$(SETTINGS) coverage run manage.py test -v 2
DJANGO_SETTINGS_MODULE=$(SETTINGS) coverage report
在我的测试套件中,我测试了一些视图:
^{pr2}$因此,我清楚地找到了'/bookmarks_json/'
视图中定义的所有内容。千万不要少coverage report
表示签名行未命中,例如:
@login_required
def bookmarks_as_json(request):
bookmarks = SearchBookmark.objects.all()
data = serializers.serialize("json", bookmarks)
return HttpResponse(data, content_type='application/json')
我已经在这里看到了Ned Batchelder的解决方案Django coverage test for URLs 0%, why?,我猜它有多相关。 因此,我编写了自己的测试运行程序:
import os
import sys
import django
from django.conf import settings
from django.test.utils import get_runner
if __name__ == "__main__":
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings.dev'
django.setup()
TestRunner = get_runner(settings)
test_runner = TestRunner(verbosity=2)
failures = test_runner.run_tests(["myapp.tests"])
sys.exit(bool(failures))
以及
python testrunner.py # works, def in view.py is reported !
但是,我想使用普通的命令./manage.py test
,所以我想知道是否有一种方法可以解决这个问题,不用编写自己的测试运行程序。在
测试的真正问题似乎是在测试视图之前没有登录。由于视图使用
login_required
修饰符,客户端被重定向,视图不会运行,因此它将在覆盖率报告中显示为缺失。在您可以在调用
self.client.get()
之前使用self.client.login()
登录。在相关问题 更多 >
编程相关推荐