Я пытаюсь проверить приложение django с помощью pytest. Я пытаюсь отправить объект следующим образом:
{"x": 1 "y": 2 ....}
То, что делает мой взгляд, возвращает список словарей,так что в моем сценарии список с этим одним отправленным словарем.
Я хочу проверить, совпадают ли мои отправленные данные с моими данными, когда я получаю вызов. Моя проблема в том, что два словаря всегда оцениваются как ложные.
Вот что я делаю:
def test_post_data_is_get_data(self):
url = api_reverse('urlname') #I get the url
data = sent_data #this is my dict I am sending defined as a big dict in my code
response_create = client.post(url, data, format='json') # I save the response
response_get = client.get(url) # I get the created data back
print(type(response_create.data)) #debugging
print(type(data))
print(type(response_create.content))
print(type(response_get))
assert response_create == response_get
Типы, которые я печатаю:
<class 'rest_framework.utils.serializer_helpers.ReturnDict'>
<class 'dict'>
<class 'bytes'>
Не имеет значения, как я сравниваю, это никогда нетакой же. Я попытался сравнить отправленные данные с:
1) response_create.content == response_get.content
2) response_create.data == response_get.data
3) response_create.data == response_get[0]
4) response_create.data == response_get.first() ## error that byte like object has not attribute first
Поскольку я вызываю представление списка, я должен получить список с одним ответом. Первый элемент должен быть теми же данными, что и отправленный .... Но он никогда не будет прежним.
Я думаю, что идет не так: я сравниваю диктат со списком, внутри которого есть один диктовочный элемент. Оба возвращаются как байты. Поэтому я думаю, что мне нужно сравнить слова, которые возвращаются в байтах, с первым элементом списка, который также находится в байтах. Имею ли я смысл?
У кого-нибудь есть идеи, что я могу сделать? Или, может быть, лучшая идея, как структурировать тест? Большое спасибо заранее!