In meiner Django-App habe ich ein Authentifizierungssystem. Wenn ich mich also nicht anmelde und versuche, auf die persönlichen Daten eines Profils zuzugreifen, werde ich auf eine Anmeldeseite weitergeleitet.
Jetzt muss ich einen Testfall dafür schreiben. Die Antworten der Browser, die ich erhalte, lauten:
GET /myprofile/data/some_id/ HTTP/1.1 302 0
GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 301 0
GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 200 6533
Wie schreibe ich meinen Test? Das was ich bisher habe:
self.client.login(user="user", password="passwd")
response = self.client.get('/myprofile/data/some_id/')
self.assertEqual(response.status,200)
self.client.logout()
response = self.client.get('/myprofile/data/some_id/')
Was könnte möglicherweise als nächstes kommen?
quelle
Sie können überprüfen,
response['Location']
ob es mit der erwarteten URL übereinstimmt. Überprüfen Sie auch, ob der Statuscode 302 lautet.quelle
target_status_code
wird.response['Location']
existiert nicht in 1.9. Verwenden Sie stattdessen Folgendes:response = self.client.get('/myprofile/data/some_id/', follow=True) last_url, status_code = response.redirect_chain[-1] print(last_url)
quelle
follow=True
es nicht bereitgestellt wird. Django (jede Version) entfernt keine normalen Antwortheader wieLocation
. Wannfollow
istTrue
, werden die Weiterleitungen verfolgt und natürlich hat die letzte Antwort keinenLocation
Header.self.assertRedirects
(oder demstatus_code
) überprüft und der Umleitungsort überprüft werden kann.