#python #django #put #django-testing
#python #django #put #django-тестирование
Вопрос:
Я тестирую метод PUT в своем приложении 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})
в моем тесте я получаю следующую ошибку, на мой взгляд:
AttributeError: 'FakePayload' object has no attribute 'readline'
Строка, которая выдает эту ошибку, является:
payload = request.readlines()
Итак, как мне убедиться, что фактическая полезная нагрузка, которую я отправил с моим запросом put (не объект FakePayload), попадает в код, который я пытаюсь протестировать на мой взгляд?
Ответ №1:
Итак, способ на самом деле добиться этого — использовать raw_post_data
функцию. Это позор, потому что, насколько я могу судить, это нарушает модель REST. Но, эй, это работает.
Я существенно изменил:
payload = request.readlines()
Для:
payload = request.raw_post_data
на мой взгляд.
Ответ №2:
Я бы предостерег от взлома вашего производственного кода из-за подобной тестовой ошибки. Это почти всегда означает, что вы делаете что-то неправильно, что вам следует исправить. В моем случае причиной этой ошибки была инициализация формы объектом request, а не запросом.ОПУБЛИКОВАТЬ или запросить.ПОЛУЧИТЬ. Если вы все еще сталкиваетесь с этой ошибкой (будем надеяться, что нет …), повторно проверьте инициализацию вашей формы или опубликуйте ее здесь.