Нет данных о сообщениях - тестирование представления 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)
Вернуться на верх