2016-03-29 53 views
0

我使用覆蓋率通過以下方式來測試我的Django應用程序:Django在views.py中的定義不在coverage中顯示?

DJANGO_SETTINGS_MODULE=$(SETTINGS) coverage run manage.py test -v 2 
DJANGO_SETTINGS_MODULE=$(SETTINGS) coverage report 

在我的測試套件我測試的一些看法:

class TestJSON(TestCase): 

    def setUp(self): 
     self.client.login(username='admin', password='passwordz') 

    def test_bookmarks_json(self): 
     translator = User.objects.create_user('normaluser', '[email protected]', 
               'secretz') 
     search = SearchBookmark(
      search="minutes") 
     search.save() 
     response = self.client.get('/bookmarks_json/') 
     ans = json.loads(response.content)[0] 
     self.assertEqual(...) 

所以我清楚地打在視圖定義的一切'/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') 

我已經看到斯內德爾德的解決方案在這裏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所以我想知道如果有解決這個問題的一種方式,不用寫我自己的測試跑步者。

回答

0

您測試的真正問題似乎是您在測試視圖之前未登錄。由於該視圖使用裝飾器login_required,客戶端被重定向,視圖無法運行,所以它會在覆蓋率報告中顯示爲缺失。

您可以在撥打self.client.get()之前使用self.client.login()登錄。

translator = User.objects.create_user('normaluser', '[email protected]', 
             'secretz') 
search = SearchBookmark(
    search="minutes") 
search.save() 
self.client.login(username='normaluser', password='secretz') 
response = self.client.get('/bookmarks_json/') 
ans = json.loads(response.content)[0] 
+0

這不是問題。你沒有看到,是我的'setUp'方法進行登錄。我還在檢查傳送的內容是否正常。 – Oz123

+0

好的,你一開始沒有顯示你的setUp方法,所以我們看不到你已經登錄。現在我將刪除這個答案。 – Alasdair

相關問題