自動化されたテスト
Stripe の実装で自動化されたテストを使用する方法をご紹介します。
自動化されたテストは、サーバー側とクライアント側のコードのどちらのアプリケーション開発にも共通する部分です。Stripe Checkout や Payment Element などのフロントエンドのシステムには、自動化されたテストを防ぐためのセキュリティ対策が講じられており、Stripe API にもレート制限が設けられています。それでも、疑似データを使用して Stripe のインターフェースと API リクエストの出力をシミュレートし、アプリケーションの動作とそのエラー処理能力をテストできます。
クライアント側のテスト
Payment Element 使用時に取引の拒否などのエラーから回復するアプリケーションの能力をテストする場合は、テストコードに Error オブジェクトをハードコーディングするか、HTTP レスポンスで疑似エラーを返す API サービスを作成することで、シミュレーション済みの Error オブジェクトを返すことができます。Error オブジェクトは、カードが支払い拒否されたときに confirmPayment 関数で返される情報を表します。次のセクションで、シミュレーション済みの Error オブジェクトの生成方法をご覧いただけます。
エラーオブジェクトを生成する
まず、Payment Element などの Stripe UI エレメントを手動で使用して、Error オブジェクトを生成します。拒否された支払い用のテストカード番号の 1 つを使用して、テスト環境の PaymentIntent を確定します。以下に示すように、確定プロセス中のエラーを記録します。
const { error } = await stripe.confirmPayment({ elements, confirmParams: { return_url: 'https://example.com' }, }) ; if (error) { console.log(error) }
これにより、以下に示すようなブラウザーコンソールに記録されるエラーオブジェクトが生成されます。error_
などのプロパティの詳細は、使用されるカードと、生成されるエラーのタイプによって異なります。
{ "charge": "{{CHARGE_ID}}", "code": "card_declined", "decline_code": "generic_decline", "doc_url": "https://docs.stripe.com/error-codes#card-declined", "message": "Your card has been declined.", "payment_intent": {"id": "{{PAYMENT_INTENT_ID}}", …}, "payment_method": {"id": "{{PAYMENT_METHOD_ID}}", …}, "request_log_url": "https://dashboard.stripe.com/test/logs/req_xxxxxxx", "type": "card_error" }
Stripe.js 関数と Stripe API を呼び出す代わりに、この Error オブジェクトを返すようにテストを変更します。さまざまなテストカードを使用して、さまざまなエラーコードのエラーを生成し、アプリケーションが各タイプのエラーを正しく処理することを確認できます。
サーバー側のテスト
サーバー側の API コールをテストするときと同じ方法を使用できます。さまざまなエラー用の Stripe API レスポンスを手動で生成して、バックエンドの自動化されたテストに返されるレスポンスを模擬します。
たとえば、3DS を必要とするオフセッション支払いをアプリケーションが正しく処理できることを確認するテストを作成するには、Payment Method pm_
を使用し、確定を true
に設定して Payment Intent を作成することでレスポンスを生成できます。
これにより、requires_
のステータスと、next_
のような 3DS 認証に関連するプロパティを持つ Payment Intent が生成されます。
{ "id": "{{PAYMENT_INTENT_ID}}", "object": "payment_intent", ... "next_action": { "type": "use_stripe_sdk", ... }, ... "status": "requires_confirmation", ... }
支払いライフサイクルの複数のステージを反映した PaymentIntent オブジェクトを生成すると、PaymentIntent が別のステータスに移行する際のアプリケーションの挙動をテストすることができます。このアプローチを自動化テストで使用して、システムがさまざまな結果に適切に応答できることを確認します。たとえば、顧客にオンセッションに戻ってもらい、次のアクションが必要な支払いを認証するようにリクエストする応答などがあります。
このアプローチを使用する状況
上記の例はすべて、アプリケーションの挙動をテストしたものであり、継続的な実装のテストスイートでの使用に適しています。Stripe API の応答を確認するためのテストが必要になったときに、テスト環境で API にリクエストを行うアプローチも許容されます。また、Stripe API リクエストを使用して Stripe API の応答が変更されていないことを定期的に検証することもできます。ただし、レート制限を避けるためこれらのテストは頻繁に行うべきではありません。