Тестовый метод ввода в Django

#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, а не запросом.ОПУБЛИКОВАТЬ или запросить.ПОЛУЧИТЬ. Если вы все еще сталкиваетесь с этой ошибкой (будем надеяться, что нет …), повторно проверьте инициализацию вашей формы или опубликуйте ее здесь.