2017-10-30 3 views
1

Mit dem folgenden Code bekomme ich dieses falsche Ergebnis: nose.proxy.AssertionError: 302! = 200: Konnte Umleitungsseite '/ mes_dossiers /' nicht abrufenDjango testen, wie Redirect

Was ist falsch an meinem Code?

#test.py 
from django.test import TestCase, RequestFactory, Client 
from ..models import * 
from ..views import * 
from django.core.management import call_command 

class Cas(TestCase): 

    def setUp(self): 
     call_command('loaddata', 'fixture_users.json', verbosity=1) 
     call_command('loaddata', 'xxxxx_tests_xxxx.yaml', 
     verbosity=1) 

    def test_dossier_duplicate(self) : 
     request = self.factory.get('/dossier/3/copier/', follow = True) 
     request.user = User.objects.get(id=3) 
     pk = 3 
     response = dossier_duplicate(request, pk) 
     response.client = Client() 
     self.assertRedirects(response,'/mes_dossiers/',status_code=302, 
     target_status_code=200) 

#urls.py 
urlpatterns = [  
url(r'^dossier/(?P<pk>[0-9]+)/copier/$',views.dossier_duplicate), 

] 

#views.py 
@login_required(login_url="/accounts/login/") 
def dossier_duplicate(request, pk): 

    dossier = get_object_or_404(Dossier, pk=pk) 
    groupe = dossier.createdBy.groups.all()[0].name 

    if not in_group(request.user, groupe) : 
     return HttpResponseForbidden('Vous ne pouvez pas accéder à ce 
     dossier') 

    else : 

     #code to duplicate the "dossier" instance and child contents 
     # 
     # 

     return redirect('/mes_dossiers/') 
+1

Was ist der Code, den Sie testen? Auch der Titel der Frage scheint mit dem Inhalt der Frage nichts zu tun zu haben. –

+0

Titel bearbeitet. Entschuldigung, es gab eine Mischung zwischen Postentwürfen. –

+0

Könnte es sein, dass die Ansicht in '/ mes_dossiers /' auch auf eine andere URL umleitet? –

Antwort

0

ich dort weitere Beispiele gefunden habe, zu ändern:

Django : Testing if the page has redirected to the desired url

https://docs.djangoproject.com/en/1.7/topics/testing/tools/#django.test.SimpleTestCase.assertRedirects

und das funktionierte:

class Cas(TestCase): 

    def setUp(self): 
     call_command('loaddata', 'fixture_users.json', verbosity=1) 
     call_command('loaddata', 'xxx_tests_xxxx.yaml', 
     verbosity=1) 

    def test_dossier_duplicate(self) : 
     request = self.client.get('/dossier/3/copier/', follow = True) 
     request.user = User.objects.get(id=3) 
     pk = 3 
     response = dossier_duplicate(request, pk) 
     response.client = Client() 
     response.client.login(username='xxxx', password='xxxxx') 

     self.assertRedirects(response, '/mes_dossiers/', status_code=302, 
     target_status_code=200, fetch_redirect_response=True) 
1

Um Umleitungen zu testen, sollten Sie den Test-Client anstelle von RequestFactory verwenden.

The API for the RequestFactory is a slightly restricted subset of the test client API:

  • It only has access to the HTTP methods get(), post(), put(), delete(), head(), options(), and trace().

  • These methods accept all the same arguments except for follows. Since this is just a factory for producing requests, it’s up to you to handle the response.

https://docs.djangoproject.com/en/1.11/topics/testing/advanced/#the-request-factory

Versuchen self.factory.get zu self.client.get

response = self.client.get('/dossier/3/copier/', follow = True)