Ich bin mit Abdeckung in der folgenden Art und Weise meine django app zu testen:Django Funktionen Definition in views.py nicht in Abdeckung angezeigt?
DJANGO_SETTINGS_MODULE=$(SETTINGS) coverage run manage.py test -v 2
DJANGO_SETTINGS_MODULE=$(SETTINGS) coverage report
In meinem Test Suite testet ich einige Ansichten:
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(...)
So bin ich klar alles in dieser Ansicht definiert trifft für '/bookmarks_json/'
. Nie weniger coverage report
sagt, dass die Unterschriftszeile nicht getroffen wird, z.B .:
@login_required
def bookmarks_as_json(request):
bookmarks = SearchBookmark.objects.all()
data = serializers.serialize("json", bookmarks)
return HttpResponse(data, content_type='application/json')
Ich habe die Lösung von Ned Batchelder hier Django coverage test for URLs 0%, why? gesehen und ich vermute es einige, wie verwandt ist. Als Folge ich meine eigenen Testrunner schrieb:
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))
Und
python testrunner.py # works, def in view.py is reported !
Allerdings würde Ich mag den normalen Befehl verwenden ./manage.py test
so frage ich mich, ob es einen Weg gibt, dieses Problem zu beheben, ohne meinen eigenen Testläufer zu schreiben.
Das ist nicht das Problem. Was Sie nicht sehen, ist, dass meine 'setUp' Methode die Anmeldung durchführt. Ich überprüfe auch, ob der gelieferte Inhalt in Ordnung ist. – Oz123
OK, Sie haben Ihre setUp-Methode zunächst nicht angezeigt, sodass wir nicht sehen konnten, dass Sie sich angemeldet haben. Ich lösche diese Antwort jetzt. – Alasdair