2011-11-12 4 views
0

Je suis en train de tester une méthode PUT dans mon application Django. Cependant, quand je l'appelle:Méthode de test dans Django

payload = '{server_lib_song_id : -1, host_lib_song_id : ' + str(lib_id) + \ 
    ', song : "' + song + '", artist : "' + artist + '" , album : "' + \ 
album +'"}' 
response = client.put('/udj/users/' + user_id + '/library/song', \ 
    data=payload, content_type='text/json', \ 
    **{'udj_ticket_hash' : ticket_hash}) 

dans mon test, j'obtiens l'erreur suivante à mon avis:

AttributeError: 'FakePayload' object has no attribute 'readline' 

La ligne qui jette cette erreur est:

payload = request.readlines() 

Alors, comment à je m'assure que la charge utile réelle que j'ai envoyée avec ma demande put (pas un objet FakePayload) est ce qui arrive au code que j'essaye de tester à mon avis?

Répondre

0

Donc, la façon de procéder est d'utiliser la fonction raw_post_data. C'est dommage car pour autant que je sache, cela casse le modèle REST. Mais bon, ça marche.

Je essentiellement changé:

payload = request.readlines() 

à:

payload = request.raw_post_data 

à mon avis.

0

Je vous déconseille de pirater votre code de production pour une erreur de test comme celle-ci. Cela signifie presque toujours que vous faites quelque chose de mal, que vous devez corriger. Dans mon cas, la cause de ce bogue était l'initialisation d'un formulaire avec l'objet request, pas request.POST ou request.GET. Si vous rencontrez toujours ce bug (espérons ne pas ...), réexaminez l'initialisation de votre formulaire ou publiez-le ici.