Stripe webhook 测试在执行时返回空表,但适用于 stripe 的 webhook 测试器

Posted

技术标签:

【中文标题】Stripe webhook 测试在执行时返回空表,但适用于 stripe 的 webhook 测试器【英文标题】:Stripe webhook test returns empty table on execution, but works on stripe's webhook tester 【发布时间】:2020-06-10 10:14:15 【问题描述】:

我们的测试套件有问题。 当我们使用测试套件运行它时,我们会从 phpUnit 得到一个“表为空...”的响应。

我们知道它有效,因为我们还使用 Stripe 的“发送网络挂钩”测试功能进行了测试,该功能有效,并且响应按预期存储。

我们的代码在这里:

public function test_webhook_received()

    $this->expectsJobs([StoreStripeWebHookJob::class]);
    $this->postJson('/stripeHook', [
        'created' => 1326853478,
        'livemode' => false,
        'id' => 'evt_00000000000000',
        'type' => 'account.external_account.created',
        'object' => 'event',
        'request' => NULL,
        'pending_webhooks' => 1,
        'api_version' => '2019-12-03',
        'data' => [
            'object' => [
                'id' => 'ba_00000000000000',
                'object' => 'bank_account',
                'account' => 'acct_00000000000000',
                'account_holder_name' => 'Jane Austin',
                'account_holder_type' => 'individual',
                'bank_name' => 'STRIPE TEST BANK',
                'country' => 'US',
                'currency' => 'gbp',
                'fingerprint' => '8JXtPxqbdX5GnmYz',
                'last4' => '6789',
                'metadata' => [],
                'routing_number' => '110000000',
                'status' => 'new',
            ],
            ],
        ]);

        $this->assertDatabaseHas('stripe_webhooks', [
            'stripe_created_at' => 1326853478,
            'type' => 'account.external_account.created',
        ]);

收到的响应是:

断言表 [stripe_webhooks] 中的行与 属性 “stripe_created_at”:1326853478, “类型”:“account.external_account.created”。

桌子是空的..

如果我们删除

$this->expectsJobs([StoreStripeWebHookJob::class]);

测试成功。显然,expectsJob() 调用应该在它所在的位置。

【问题讨论】:

【参考方案1】:

ExpectsJob 也会拦截作业。很像expectsException。从您干净的命名约定“StoreStripe ...”来看 - 我会说在这些测试环境下它真的没有存储。

您需要单独测试您的端点/控制器是否正在排队作业......并且该作业正在存储数据。 2 次测试。

【讨论】:

以上是关于Stripe webhook 测试在执行时返回空表,但适用于 stripe 的 webhook 测试器的主要内容,如果未能解决你的问题,请参考以下文章

测试 Stripe 的 trial_will_end webhook

Stripe webhook 测试在控制器中引发错误

如何使用 ngrok 测试接收 Stripe webhook

通过 HTTPS 测试 Stripe webhook 不断失败:超时

NextJS Stripe Webhook 原始正文

为啥 Stripe 事件不会触发并且不会被 webhook 接收?