Response.status_code 400 для простого теста представления
Я передаю простое json-тело моему представлению, но получаю 400 вместо 200. Это должен быть действительно простой тест, но я не могу понять, что не так. Спасибо.
Url:
"api/v2/ada/send",
views.sendView.as_view(),
name="ada-send",
),
Вид:
class sendView(generics.GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, *args, **kwargs):
body = request.data
return Response(body, status=status.HTTP_200_OK)
Просмотр теста:
class AdaSendGet(APITestCase):
url = reverse("ada-send")
def test_choice_type_valid(
self,):
user = get_user_model().objects.create_user("test")
self.client.force_authenticate(user)
response = self.client.post(
self.url,
{
"contact_uuid": "49548747-48888043",
"choices": 3,
"message": (
"What is the issue?\n\nAbdominal pain"
"\nHeadache\nNone of these\n\n"
"Choose the option that matches your answer. "
"Eg, 1 for Abdominal pain\n\nEnter *back* to go to "
"the previous question or *abort* to "
"end the assessment"
),
"step": 6,
"value": 2,
"optionId": 0,
"path": "/assessments/assessment-id/dialog/next",
"cardType": "CHOICE",
"title": "SYMPTOM"
},
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
Ошибка:
self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 400 != 200
response.json() возвращает:
{'detail': 'JSON parse error - Expecting property name enclosed in double quotes: line 1 column 2 (char 1)'}
Странный случай. Я решил ее, удалив
content_type="application/json",
из полезной нагрузки.
Как говорится в документации здесь https://www.django-rest-framework.org/api-guide/testing/#api-test-cases
Когда вы хотите указать формат, используйте аргумент format.
Методы, создающие тело запроса, такие как post, put и patch, включают аргумент format, что облегчает генерацию запросов, использующих тип содержимого, отличный от многокомпонентных данных формы.