Django Test | Как передать словарь, содержащий словарное значение, через clients.post
У меня есть словарь A
, который содержит одно значение, которое также является словарем B
B = {"k1": "v1", "k2": "v2", "k3": "v3"}
A = {"User": B}
Этот тип словаря используется в одной из моих views
функций
def views_function(request):
# request.data is a dictionary containing a single value that is also a dictionary. Just like A
Я пытаюсь написать модульный тест для views_function
из django.test.TestCase
.
from django.test import TestCase
class test_cases(TestCase):
def setUp(self):
self.B = {"k1": "v1", "k2": "v2", "k3": "v3"}
self.A = {"User": self.B}
self.url = reverse("views_function_url")
def test_views_function(self):
response = self.client.post(url, self.A, format="json")
Но clients.post
, похоже, не может принять A
в качестве входных данных. Когда я печатаю A
внутри test_views_function
, он показывает правильный словарь.
def test_views_function(self):
B = {"k1": "v1", "k2": "v2", "k3": "v3"}
A = {"User": B}
print(A) # {"User": {"k1": "v1", "k2": "v2", "k3": "v3"}}
response = self.client.post(url, A, format="json")
Но когда я добавляю оператор печати к views_function
, почему-то появляется только последний ключ из B
def views_function(request):
print(request.data.dict()) # {'User': 'k3'}
Решение оказалось простым, я случайно выбрал неправильный аргумент. Это content_type="application/json"
, а не format="json"
в self.client.post()