2013-06-04 2 views
3

Je veux tester que ma vue renvoie correct json après les processus. voici mon avis:Django - vue de test qui fonctionne avec les requêtes ajax

@login_required 
@require_POST 
def xxx_view(request): 
    if 'post_id' in request.POST: 
     post_id = request.POST['post_id'] 

     post = Post.objects.get(id=post_id) 
     post.order = 2 
     post.save() 

     json_dump = simplejson.dumps({'new_title': post.order,}) 
     return HttpResponse(json_dump, mimetype='application/json') 
    else: 
     return HttpResponse('oups') 

cela fonctionne correctement. Voici ce que j'ai essayé de tester:

from django.test import TestCase 
from django.test.client import Client 
from django.utils import simplejson 
from app.models import * 

c = Client() 
class CustomTests(TestCase): 
    def test_xxx(self): 
     json_data = simplejson.dumps({'post_id': 1,}) 

     response = client.post('/content/vote/', json_data, 
       content_type='application/json', 
       HTTP_X_REQUESTED_WITH='XMLHttpRequest') 
     self.assertEqual(response.status_code, 302) # this is OK. 
     self.assertEqual(response.content, 2) # but this fails. 

response.content renvoie la chaîne vide.

Merci.

+2

Je ne comprends pas votre deuxième affirmation. 'response.content' serait quelque chose comme' {"new_title": 2} ', sûrement? –

+0

@DanielRoseman Probablement. Mais il retourne la chaîne vide '' – alix

+0

Pourquoi votre vue retient-elle un '302'? Il ne semble pas que vous en délivrez un? – dm03514

Répondre

3

Lorsque le code de réponse est 302, vous avez affaire à une redirection. Les redirections ont leur propre objet qui leur est assigné et leur propriété .content est vide. Si vous souhaitez suivre la redirection, vous pouvez ajouter follow = True au client.post, si vous souhaitez vérifier l'emplacement de redirection, vous pouvez vérifier la réponse ["Location"].