【问题标题】:How to write integration tests to test Stripe integration in my node application如何编写集成测试来测试我的节点应用程序中的 Stripe 集成
【发布时间】:2020-12-02 15:07:30
【问题描述】:

您将如何编写集成测试来测试我的节点应用程序中的 Stripe 集成?

现在我有一个非常简单的节点应用程序,它使用 Stripe 接受信用卡/借记卡付款。

我正在使用以下 Stripe 库 https://github.com/stripe/stripe-node

例如

      const charge = await stripe.charges.create({
        amount: 2000,
        currency: GBP,
        source: id,
      });

      if (!charge) throw new Error("charge unsuccessful");

      res.status(200).json({
        message: "charge posted successfully",
        charge,
      });

我可以手动测试功能。

如何使用集成和单元测试来测试此功能?

【问题讨论】:

    标签: javascript node.js unit-testing stripe-payments integration-testing


    【解决方案1】:

    您可以采取几种方法。首先是使用您的测试 API 密钥针对您的 Stripe 帐户的测试模式数据测试调用:

    https://dashboard.stripe.com/test/apikeys

    Stripe 有许多可用于测试模式测试的卡号,它们都在此处定义:

    https://stripe.com/docs/testing

    请注意,您可以使用测试密钥安全地对 API 进行任何调用,并且该行为将(几乎在所有方面)模仿实时模式下会发生的情况,但不会产生实际费用:

    https://stripe.com/docs/keys#test-live-modes

    除了使用您的测试 API 密钥或完全模拟 stripe-node 依赖项using Jest,另一种方法是使用 Stripe 的官方模拟服务器:

    https://github.com/stripe/stripe-mock

    这个想法是,您的 ci/test 环境将运行模拟服务器,而不是使用您的测试密钥访问真正的 Stripe API,而是访问模拟服务器:

    const stripe = new Stripe("sk_test_xyz", {
      host: "localhost",
      protocol: "http",
      port: 12111,
    });
    

    如果你像上面那样初始化stripe-node,你的调用将被发送到http://localhost:12111而不是https://api.stripe.com

    【讨论】: