Нет данных о сообщениях - тестирование представления Django с помощью AJAX-запроса
В настоящее время я тестирую свое Django-приложение, чтобы добавить к нему некоторые CI/CD. Однако большинство моих представлений содержат секцию AJAX для запросов, отправляемых фронтендом. Я увидел, что для их тестирования я могу просто сделать что-то вроде этого:
response: HttpResponseBase = self.client.post(
path=self.my_page_url,
content_type='application/json',
HTTP_X_REQUESTED_WITH='XMLHttpRequest',
data={
'id': '123456',
'operation': "Fill Details"
}
)
Большую часть волшебства здесь (я думаю) делает XMLHttpRequest
, имитируя заголовки, которые должны быть у AJAX-запроса. Однако, на мой взгляд, у меня есть раздел, где я делаю: request.POST['operation']
, но это, кажется, не работает во время тестов, поскольку, очевидно, никакие данные не передаются через атрибут POST
. Я проверил, и мои данные передаются в request.body
. Я могу включить оператор or, но было бы идеально, если бы код представления не изменялся из-за тестов. Есть ли способ заставить метод client.post
передавать данные через атрибут POST?
Вы можете имитировать ajax как POST, используя библиотеку запросов python.
import requests
headers = {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
}
data = {
'id': '123456',
'operation': "Fill Details"
}
session = requests.Session()
session.post(url, data=data, headers=headers)