Python/Django Test: Макет службы верификации

Я пытаюсь написать тест для службы, которая использует службу Twilio Verification. Я основываю свой тест на следующей статье: https://www.twilio.com/blog/testing-twilio-applications-python-pytest

Однако я не могу правильно нацелить метод client.services.verify.services из модуля TwilioRest, поскольку запрос всегда отправляется на сервер Twilio

У кого-нибудь был успех в правильном высмеивании этого метода?

verification/services.py

from decouple import config
from twilio.rest import Client
from twilio.base.exceptions import TwilioRestException
from .config import INVALID_PARAMETER, TOO_MANY_REQUESTS


account_sid_production = config("TWILIO_ACCOUNT_SID_PRODUCTION")
auth_token_production = config("TWILIO_AUTH_TOKEN_PRODUCTION")
verify_service_sid = config("TWILIO_VERIFY_SERVICE_SID")
client = Client(account_sid_production, auth_token_production)


def verification_service_create(phone_number, channel="sms"):
    try:
        client.verify.services(verify_service_sid).verifications.create(
            to=phone_number, channel=channel
        )

        return (
            True,
            "Check your phone for verification code",
            "Verification Code successfully sent",
        )
    except TwilioRestException as error:
        if error.code == INVALID_PARAMETER:
            return (
                False,
                "Phone value is incorrectly formatted or is not a valid phone number.",
                "Use strict E.164 formatting, including the + sign,"
                "for phone numbers in the To parameter. Example: +15017122661.",
            )
        if error.code == TOO_MANY_REQUESTS:
            return (
                False,
                "You have sent too many requests to this service. Please try again later.",
                "You have sent too many requests to this service. Please try again later.",
            )
        return (
            False,
            "Internal Error",
            "Internal Error",
        )

verification/tests/services/test_verification_service_create.py

from unittest.mock import patch
from django.test import TestCase
from verification.services import verification_service_create


class TwilioVerificationServiceCreateTest(
    TestCase,
):


    @patch(
        "verification.services.client.verify.services.create", return_value=(True)
    )
    def test_verification_service_create_a(self, mock_verification_service_create):
        
        mock_verification_service_create.return_value = True
        is_success = verification_service_create("MOCK PHONE NUMBER")
        # self.assertIs(mock_utils.called, True)
        self.assertIs(is_success, True)

Вернуться на верх