2016-03-29 7 views
0

私はDjangoのアプリをテストするには、以下の方法でカバレッジを使用しています:私のテストスイートでviews.pyのDjango関数定義はカバレッジに表示されませんか?

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以下が署名行は、私がここにDjango coverage test for URLs 0%, why?をネッドBatchelderによって溶液を見ていると私はそれはいくつかの方法に関連している推測しています。:例えば、

@login_required 
def bookmarks_as_json(request): 
    bookmarks = SearchBookmark.objects.all() 
    data = serializers.serialize("json", bookmarks) 
    return HttpResponse(data, content_type='application/json') 

をヒットしていないことを言っていません。 その結果、私は自分のテストランナーを書いた:

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

関連する問題