У меня есть builtins.dict
словарь, который выглядит следующим образом:
request = {"data": {"var": "hello", "content": "jello"}}
Я пишу тест для конечной точки API в django. Я вызываю метод post
этого класса и отправляю ему этот запрос, и я получаю доступ к данным в запросе, используя request.data
. Но, конечно, это не сработает, потому что request
, входящий в мою функцию post
, на самом деле django.http.HttpRequest
, а не builtins.dict
. Как мне сделать так, чтобы мой request
аргумент был HttpRequest
, а не dict
, чтобы моя функция могла его правильно использовать?
Редактировать:
Хорошо, у меня естьфункция, которая выглядит следующим образом:
class EmailView(APIView):
"""
Serializes POST data for sending emails.
"""
authentication_classes = [authentication.TokenAuthentication]
permission_classes = [permissions.IsAuthenticated]
def post(self, request):
"""
Sends an email using SES
:param request: POST request
:return: drf http response
"""
serializer = EmailSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
args = serializer.data
send_mail(args.get("subject"), args.get("message"), "info@mycomp.io", args.get("to"), fail_silently=False)
return Response('Email sent.', status=status.HTTP_200_OK)
Я хочу проверить эту функцию. Итак, я написал что-то вроде этого:
class EmailTests(APITestCase):
def setup(self):
self.user = UserProfile.objects.create_user(
'testuser', email='testuser@test.com', password='testpass')
self.user.save()
def init_request(self):
request = {"data": {"sender": "info@mycomp.io", "to": ["test@gmail.com", "testt@gmail.com"],
"subject": "Subject", "message": "Hello"}}
return request
def test_incorrect_email(self):
request = self.init_request()
reponse = EmailView.post(EmailView, request)
print(reponse)
Но, конечно, это не работает, потому что request
я посылаю через мой на post
в тестене фактический запрос от rest_framework.request
. Думаю, я говорю, что понятия не имею, как правильно написать тест для этого ... есть идеи?
Редактировать:
Мои новые тесты. Класс EmailView не изменился.
class EmailTests(APITestCase):
def setup(self):
self.user = UserProfile.objects.create_user(
'testuser', email='testuser@test.com', password='testpass')
self.user.save()
def init_request(self):
request = {"sender": "info@mycomp.io", "to": ["test@gmail.com", "testt@gmail.com"],
"subject": "Subject", "message": "Hello"}
return request
def test_incorrect_email(self):
request = self.init_request()
factory = APIRequestFactory()
request = factory.post('/v1/send_email/', request)
view = EmailView()
reponse = view.post(request)
print(reponse)