SMS / текстовый бэкэнд в Джанго - PullRequest
1 голос
/ 13 марта 2019

Я хочу создать бэкэнд для отправки SMS/Text, как EmailBackEnd Я могу выполнить задачу отправки SMS просто отлично, но проблема в тестировании.

Я могу проверить, сколько писем отправлено во время тестов, используя django.core.mail.outbox Я хочу сделать что-то похожее для SMS, скажем sms.smsoutbox, как мне написать что-то подобное для Django.

Я понимаю, что email outbox находится в локальной памяти на протяжении одного теста, поэтому я могу спросить, как вы можете поместить что-то в локальную память на время теста.

Спасибо уже.

1 Ответ

0 голосов
/ 13 марта 2019

Я думаю, что хорошим 'ol mock будет ваш лучший выбор, если вы используете какой-то известный API-интерфейс SMS, такой как AWS SNS. Заимствуя из этого SO сообщения , давайте предположим, что ваша функция электронной почты выглядит следующим образом

import boto3

def send_sms(number, message):
    sns = boto3.client('sns')
    sns.publish(PhoneNumber=number, Message=message)

Ваш тестовый пример может выглядеть следующим образом

from django.test import TestCase, mock
from src import send_sms

class SendSMSTestCase(TestCase)

    @mock.patch('boto3.client')
    def test_send_sms(self, mock_client):
        mock_publish = self.mock_client.return_value.publish

        send_sms('+18005551212', 'Hello there!')

        mock_publish.assert_called_once_with(
            PhoneNumber='+18005551212',
            Message='Hello there!'
        )

Вы верите, что вызов API SMS (в данном случае SNS через Boto) протестирован и будет работать, и вы просто проверяете, что ваш код вызывает его правильно.

Вы могли бы создать больше машин для повторной реализации django.core.mail.outbox для SMS, но, вероятно, в этом нет необходимости.

...