自動化されたテスト
Stripe の実装で自動化されたテストを使用する方法をご紹介します。
自動化されたテストは、サーバー側とクライアント側のコードのどちらのアプリケーション開発にも共通する部分です。Stripe Checkout や Payment Element などのフロントエンドのシステムには、自動化されたテストを防ぐためのセキュリティ対策が講じられており、Stripe API にもレート制限が設けられています。それでも、疑似データを使用して Stripe のインターフェースと API リクエストの出力をシミュレートし、アプリケーションの動作とそのエラー処理能力をテストできます。
クライアント側のテスト
Payment Element 使用時に取引の拒否などのエラーから回復するアプリケーションの能力をテストする場合は、テストコードに Error オブジェクトをハードコーディングするか、HTTP レスポンスで疑似エラーを返す API サービスを作成することで、シミュレーション済みの Error オブジェクトを返すことができます。Error オブジェクトは、カードが支払い拒否されたときに confirmPayment 関数で返される情報を表します。次のセクションで、シミュレーション済みの Error オブジェクトの生成方法をご覧いただけます。
エラーオブジェクトを生成する
まず、拒否された支払いのテストカード番号の 1 つを使用してテスト用の支払いインテントを確定し、Payment Element などのStripe UI 要素を手動で使用してエラーオブジェクトを生成します。以下のように、確認プロセス中のエラーをログに記録します。
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 のレスポンスが変更されていないことを定期的に検証することもできますが、レート制限を回避するために、これらのテストの実行頻度は少なくしてください。