Testplaatsmethode in Django

Ik test een PUT-methode in mijn Django-app. Wanneer ik echter bel:

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})

in mijn test krijg ik de volgende fout in mijn mening:

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

De regel die deze fout veroorzaakt is:

payload = request.readlines()

Dus hoe kan ik ervoor zorgen dat de werkelijke payload die ik heb verzonden met mijn put-aanvraag (niet een FakePayload-object) overeenkomt met de code die ik probeer uit te testen?

0

2 antwoord

Dus de manier om dit aan te pakken is door de functie raw_post_data </​​code> te gebruiken. Dit is jammer, want zover ik weet, breekt dit het REST-model. Maar goed, het werkt.

Ik ben wezenlijk veranderd:

payload = request.readlines()

naar:

   payload = request.raw_post_data

volgens mij.

0
toegevoegd

Ik zou waarschuwen tegen het hacken van je productiecode voor een testfout als deze. Het betekent bijna altijd dat je iets verkeerd doet, wat je zou moeten oplossen. In mijn geval was de oorzaak van deze fout het initialiseren van een formulier met het object request, not request.POST of request.GET. Als je deze bug nog steeds ervaart (laten we hopen niet ...), herzie je je formulierinitialisatie of plaats je deze hier.

0
toegevoegd