10 Stimmen

Django testet benannte URLs mit zusätzlichen GET-Parametern

Ich versuche, einige Tests für eine Django-Anwendung zu schreiben, an der ich arbeite, aber ich habe mich noch nicht für die genauen URLs entschieden, die ich für jede Ansicht verwenden möchte. Daher verwende ich benannte URLs in den Tests.

Ich habe zum Beispiel eine URL namens Dashboard:

c = Client()
resp = c.get(reverse('dashboard'))

Diese Ansicht sollte nur für angemeldete Benutzer verfügbar sein. Wenn der aktuelle Benutzer anonym ist, sollte er auf die Anmeldeseite umgeleitet werden, die ebenfalls eine benannte URL ist. Dabei wird jedoch ein zusätzlicher GET-Parameter verwendet, um die URL zu verfolgen, von der er gerade gekommen ist, was zu folgendem Ergebnis führt:

/login?next=dashboard

Wenn ich dann versuche, diese Umleitung zu testen, scheitert sie an diesen zusätzlichen Parametern:

# It's expecting '/login' but gets '/login?next=dashboard'
self.assertRedirects(resp, reverse('login'))

Offensichtlich funktioniert es, wenn ich sie in den Test fest einbaue:

self.assertRedirects(resp, '/login?next=dashboard')

Aber wenn ich mich jemals dazu entschließe, die URL für meine Dashboard-Ansicht zu ändern, müsste ich jeden Test, der sie verwendet, aktualisieren.

Gibt es etwas, was ich tun kann, um die Handhabung dieser zusätzlichen Parameter zu erleichtern?

Jeder Rat ist willkommen.

Danke.

5voto

greg Punkte 1365

Wie Sie sehen können, reverse(...) gibt eine Zeichenkette zurück. Sie können ihn als verwenden:

self.assertRedirects(resp, '%s?next=dashboard' % reverse('login'))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X