Ich programmiere also eine Seite, die in Abschnitte unterteilt ist, die ihrerseits in Unterabschnitte unterteilt sind. Wenn ein Benutzer in meinem Setup auf den Link zu einem Abschnitt klickt (sagen wir zum Beispiel "/ home"), werden diese auf einen seiner Unterabschnitte umgeleitet (z. B. "/ home / cover"). Wenn ein Benutzer zur Stammwebsite wechselt, werden diese außerdem in einen der Abschnitte (in meinem Fall "/ home") umgeleitet. Bei diesem Setup passiert es, wenn jemand zum Root geht, dass er zuerst nach '/ home' und von dort nach '/ home / cover' umgeleitet wird. Diese Weiterleitungen sind wie folgt implementiert:
Haupt urls.py:
%Vor%Komponenten / home / urls.py:
%Vor%In der Praxis scheint das gut zu funktionieren: Ich kann auf meiner Website navigieren und alle Umleitungen tun, was sie sollten. Ich kann jedoch nicht herausfinden, wie ich meine Komponententests für sie und insbesondere für die Root-Umleitung implementieren soll.
Der Test, den ich ursprünglich entworfen habe, war wie folgt:
%Vor%Wenn ich es jedoch ausführe, bin ich mit dem Fehler konfrontiert:
%Vor%Jetzt könnte ich einfach alle doppelten Umleitungen entfernen und jeden umgeleiteten URL direkt auf sein Ziel richten, aber die aktuelle Konfiguration fühlt sich sauberer und einfacher zu pflegen an, also wenn es eine Möglichkeit gibt, kann ich es richtig testen, das wäre perfekt.
Ich bin sehr neu in Django und der Webentwicklung im Allgemeinen, also tut es mir leid, wenn ich hier eine offensichtliche Antwort verpasse.
TestCase.assertRedirects (Antwort, erwartete_url, status_code = 302, target_status_code = 200, msg_prefix = '')
Bestätigt die Antwort Rückgabe eines status_code redirect status, umgeleitet zu expected_url (einschließlich aller GET-Daten), und die letzte Seite wurde mit empfangen target_status_code.
Wenn Ihre Anfrage das Argument follow verwendet hat, werden expected_url und target_status_code ist die URL und der Statuscode für den letzten Punkt der Redirect-Kette.
Quelle: Django-Dokumentation
Es gibt keinen Schaden bei der doppelten Umleitung (abgesehen von den zusätzlichen HTTP-Anfragen). Aus diesem Grund testet Django auch die umgeleitete URL, wenn es sich um eine lokale URL handelt. Der Standardantwortcode, den es erwartet, ist 200, aber da Sie eine doppelte Umleitung haben, die 301 ist, schlägt das fehl. Um also den Testfall zum Erfolg zu führen, muss man behaupten, dass die Weiterleitung auch umleitet:
%Vor% Standardmäßig holt Djangos assertRedirects
den Statuscode der Seite und testet, dass es OK
ist. Sie können dies deaktivieren, indem Sie fetch_redirect_response=False
:
Tags und Links django unit-testing url-redirection