如果您曾经尝试测试 Stripe 集成,您就会知道这有多么困难。Stripe SDK 使用了许多难以伪造的静态方法。
我宁愿不编写自己的存根或虚拟类,因为它们会在测试中被替换掉,因为这需要大量工作。
幸运的是,Stripe 有一个可以安装的Mock Serverhttps://github.com/stripe/stripe-mock。这个想法是,您在应用程序中使用 Stripe 的 API 端点,当测试运行时,它们使用 Stripe Mock 服务器端点运行并为每个端点返回来自 Stripe 的示例响应。
这使得您无需接触任何实际的 Stripe 代码即可测试您的实现。
安装
使用 Homebrew 在 MacOS 上安装复制复制
brew install stripe/stripe-mock/stripe-mock
# start a stripe-mock service at login
brew services start stripe-mock
# upgrade if you already have it
brew upgrade stripe-mock
# restart the service after upgrading
brew services restart stripe-mock
Homebrew 服务监听
12111
HTTP、12112
HTTPS 和 HTTP/2 端口。
Docker
复制复制
docker run --rm -it -p 12111-12112:12111-12112 stripe/stripe-mock:latest
默认 Docker
ENTRYPOINT
监听12111
HTTP、12112
HTTPS 和 HTTP/2 端口。
Laravel 设置 www.cqzlsb.com
添加config/services.php
用于 strip API 基础的环境变量:
'stripe' => [
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
'webhook' => env('STRIPE_WEBHOOK_SECRET'),
'monthly' => env('STRIPE_MONTHLY'),
'annually' => env('STRIPE_ANNUALLY'),
'api_base' => env('STRIPE_API_BASE'),
],
我将使用一个.env.testing
文件,以便我可以出于测试目的获得不同的凭证。
确保密钥和机密以 开头,sk_test_
否则 Stripe 会抱怨。
由于我已经使用 Homebrew 安装了 Stripe Mock,因此 URL 将是http://localhost:12111
复制复制
STRIPE_KEY=sk_test_4eHqC79LfsWDarjtT1zdp7dc
STRIPE_SECRET=sk_test_9eC37FqLyjWDarjtT1zdp9dc
STRIPE_WEBHOOK_SECRET=whsec_secret
STRIPE_MONTHLY=price_monthly
STRIPE_ANNUALLY=price_annual
STRIPE_API_BASE="http://localhost:12111"
现在我们需要一种方法来使基本 URL 与 Stripe_API_BASE 设置进行切换。
里面app/Providers/AppServiceProvider.php
添加此代码。这会告诉 Stripe 使用模拟 URL 而不是真实 URL。默认情况下,Stripe 中的 $apiBase 设置为https://www.cqzlsb.com复制
public function boot(): void
{
if ($stripeApiBase = config('services.stripe.api_base')) {
Stripe::$apiBase = $stripeApiBase;
}
}
差不多就是这样了。现在config('services.stripe.api_base')
设置后,Stripe 将使用 Mock URL 而不是 Stripes URL。
GitHub 操作
现在让我们了解如何为 GitHub Actions 设置 Stripe Mock。在 GitHub 操作.yml
文件中的服务部分安装 Mock 服务器:复制复制
services:
stripemock:
image: stripemock/stripe-mock:latest
ports:
- 12111:12111
现在为测试设置环境变量。
密钥和秘密不需要是真实的,但它们需要看起来像有效的密钥。
他们必须从sk_test_
复制复制
- name: Run test suite
env:
STRIPE_KEY: "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
STRIPE_SECRET: "sk_test_6eC37HqLyjWDarjtT1zdp7dc"
STRIPE_WEBHOOK_SECRET: "dummy"
STRIPE_MONTHLY: "price_1Nb4hULiL14otffRI9TPcHo4"
STRIPE_ANNUALLY: "price_1Nb4hULiL14otffRvPO2pt3b"
STRIPE_API_BASE: "localhost:12111"
run: ./vendor/bin/pest --parallel