Как подделать стрип в модульном тесте Django

Мы используем stripe для платежной системы, и stripe testing docs является ее тестовым документом. Я хочу подделать Stripe, чтобы протестировать нашу платежную систему, но общая стоимость счета-фактуры Stripe все время равна нулю.

Я высмеял stripe.InvoiceItem.create и stripe.Invoice.finalize_invoice и stripe.Invoice.create вот так:

@patch("app_name.models.stripe.InvoiceItem.create")
@patch("app_name.models.stripe.Invoice.finalize_invoice")
@patch("app_name.models.stripe.Invoice.create")
def test_method(
    self,
    mock_create,
    mock_finalize,
    mock_invoice_item,
):
    response = MagicMock()
    # api_key and stripe_account from this link https://stripe.com/docs/api/connected_accounts
    response.api_key = "sk_test_MSc53AbTknQXPy"
    response.stripe_account = "acct_1032D82eZvKYlo2C"  # Stripe account ID
    # last version here https://stripe.com/docs/upgrades
    response.stripe_version = "2022-08-01" 
    mock_invoice_item.return_value = response

    response = MagicMock()
    response.total = 20
    response.invoice_pdf = "https://google.com"
    response.id = "sk_test_MSc53AbTknQXPy"
    mock_create.return_value = response
    mock_finalize.return_value = response.id

теперь я думаю, может мне стоит использовать stripe-mock каким-то образом для имитации stripe, но я не могу понять как?

Я действительно не знаю, как вы издеваетесь над различными функциями Stripe, чтобы точно определить проблему с общей стоимостью счета.

Если вы думаете использовать stripe-mock, я полагаю, что лучший способ справиться с модульным тестированием - сделать это агностическим способом (независимо от стека), запустив stripe-mock Docker, как описано на github Readme и создав прокси, который будет перенаправлять любой вызов API на URL Docker вместо фактического URL API (https://api.stripe.com). Это позволит вам проводить модульное тестирование локально на вашей машине и даже с помощью предпочитаемого вами CI/CD.

При этом следует помнить, что существуют некоторые известные ограничения, описанные в Readme doc.

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