Piszę niektóre testy dla mojej aplikacji django. Moim zdaniem, przekierowuje do innego adresu URL za pomocą 'HttpResponseRedirect'. Więc jak mogę to przetestować?Django: Jak przetestować dla 'HttpResponsePermanentRedirect'
Odpowiedz
from django.http import HttpResponsePermanentRedirect
from django.test.client import Client
class MyTestClass(unittest.TestCase):
def test_my_method(self):
client = Client()
response = client.post('/some_url/')
self.assertEqual(response.status_code, 301)
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
self.assertEqual(response.META['HTTP_LOCATION'], '/url_we_expect_to_be_redirected_to/')
Istnieją inne atrybuty odpowiedzi, które mogą być interesujące do przetestowania. Jeśli nie masz pewności, co jest na obiekcie to zawsze można zrobić
print dir(response)
EDIT dla aktualnej wersji Django
To trochę prostsze teraz, po prostu zrobić:
self.assertEqual(response.get('location'), '/url/we/expect')
Sugerowałbym również użycie odwrotnej strony, aby wyszukać adres URL, którego oczekujesz od nazwy, jeśli mimo to jest to URL w Twojej aplikacji.
Ostatnia linia zgłasza błąd w Django 1.4: 'AttributeError: 'Obiekt HttpResponseRedirect' nie ma atrybutu" META' " –
Tak, zmieniono w wersji 1.4. Zamiast tego należy porównać 'response.get ('location')' z żądanym przekierowaniem. – aychedee
Korzystanie z wersji 1.4.5 i META nie jest dostępne w odpowiedzi? – simi
Klasa Django TestCase
ma metodę assertRedirects
, której można użyć.
from django.test import TestCase
class MyTestCase(TestCase):
def test_my_redirect(self):
"""Tests that /my-url/ permanently redirects to /next-url/"""
response = self.client.get('/my-url/')
self.assertRedirects(response, '/next-url/', status_code=301)
Kod stanu 301 sprawdza, czy jest to stałe przekierowanie.
Czy to działa dla każdego, kto używa Django '<= 1.5.2"? Wygląda na to, że trafiłem [ten błąd] (https://bitbucket.org/kmike/django-webtest/issue/8/assertredirects-response-code-was-302). –
@ JonasG.Drange łączysz się z raportem błędu dla wersji 1.5.2 aplikacji django-webtest, a nie samego Django. W mojej oryginalnej odpowiedzi zasugerowałem, że możesz użyć 'follow = False' w żądaniu pobierania, aby powstrzymać klienta od wykonania przekierowania. To było nieprawidłowe, więc usunąłem to. Metoda "assertRedirect" zawsze sprawdza stronę statusu, zgodnie z dokumentacją. Istnieje bilet [# 20919] (https://code.djangoproject.com/ticket/20919), aby zezwolić na 'assertRedirects' nie ładowanie strony docelowej. – Alasdair
To ma więcej sensu. Dzięki. –
w Django 1.6, można użyć (nie zaleca):
from django.test import TestCase
from django.http import HttpResponsePermanentRedirect
class YourTest(TestCase):
def test_my_redirect(self):
response = self.client.get('/url-you-want-to-test/')
self.assertEqual(response.status_code, 301)# premant 301, temporary 302
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
self.assertEqual(response.get('location'), 'http://testserver/redirect-url/')
zamiast po jest bardziej wydajny i zwięzłe i nie http://testserver/
potrzeba
from django.test import TestCase
class YourTest(TestCase):
def test1(self):
response = self.client.get('/url-you-want-to-test/')
self.assertRedirects(
response, '/redirect-url/',status_code=301,target_status_code=200)
- 1. Jak przetestować aplikację django umieszczoną w podfolderze?
- 2. Jak przetestować schemat bazy danych django?
- 3. Django Rest Framework - Jak przetestować ViewSet?
- 4. Jak przetestować model Django z pytestem?
- 5. Jak mogę przetestować dla NaN?
- 6. Jak przetestować ręczny kod transakcji DB w Django?
- 7. Jak mogę przetestować pusty zestaw zapytań w Django?
- 8. Jak przetestować 404 NIE ZNALEZIONO za pomocą frameworka django?
- 9. Jak przetestować ClassFileTransformer/javaagent?
- 10. Jak przetestować bibliotekę wewnętrzną?
- 11. Jak przetestować usługi internetowe?
- 12. Szyny: Jak przetestować state_machine?
- 13. Jak JUnit przetestować iteracyjnej
- 14. Jak przetestować zakresy?
- 15. Robolectric: jak przetestować SherlockActivity
- 16. Jak przetestować transakcje MySQL?
- 17. Jak przetestować dźwięk?
- 18. Jak przetestować aplikację NFC?
- 19. Scalatest - jak przetestować println
- 20. Jak przetestować kod asynchroniczny
- 21. Jak przetestować wtyczkę intellij?
- 22. Rspec: Jak przetestować rekursję?
- 23. Jak przetestować io.writer w golangu?
- 24. Korzystając z zasięgu, jak przetestować ten wiersz?
- 25. Jak najlepiej przetestować kod Java?
- 26. Jak przetestować ModelMetadata.FromLambdaExpression w MVC?
- 27. Jak przetestować moduł Rubin Mixin?
- 28. Jak mogę przetestować dla belongs_to i has_many w Railsach?
- 29. Jak przetestować to samo twierdzenie dla dużej ilości danych
- 30. Jak przetestować pakiet Dart'a dla klienta i serwera?
Mógłbyś rozwinąć więcej? Co dokładnie oznacza test? – Babu