Django подражание функции в представлении не работает
Ок, вот ситуация.
Я использую Django, DRF и для тестов django.test и unitest.mock
.
У меня есть View, который выполняет метод внутри post-запроса, отправляя сообщение в Kafka (send_message_to_kafka
).
Этот метод не находится в наборе представлений, и я пытаюсь его подружить.
Я написал 2 теста.
- для вызова метода wrapper_send_message_to_kafka(), который вызывает send_message_to_kafka внутри него.
- self.client.post("/viewset/", data=payload).
Оба этих теста имитируют функцию send_message_to_kafka, минуя фактическую публикацию в Kafka.
@mock.patch('utils.send_message_to_kafka', return_value={"success": True, "message": "Message sent to Kafka successfully!"})
Но первый работает, как и ожидалось, а второй не высмеивается.
View
@api_view(["POST"])
def example_view(request):
if request.method == "POST":
...
result = send_message_to_kafka(json.dumps((message)))
Тесты
from django.test import TestCase
import unittest.mock as mock
...
@mock.patch('utils.pubsub.send_message_to_kafka', return_value={"success": True, "message": "Message sent to Kafka successfully!"})
def test_send_message_to_kafka(self, send_message_mock):
result = wrapper_send_message_to_kafka()
self.assertTrue(result["success"])
@mock.patch('utils.send_message_to_kafka', return_value={"success": True, "message": "Message sent to Kafka successfully!"})
def test_start_run(self, send_message_mock):
response = self.client.post(
"/execute/",
data=payload,
format="json",
)