【问题标题】:Create a Mock for Stripe or use a Stub on Stripe object?为 Stripe 创建 Mock 或在 Stripe 对象上使用 Stub?
【发布时间】:2015-11-23 07:37:51
【问题描述】:

我正在为使用 StripeBackbone 应用程序编写测试。我正在使用mocha-phantomjs 运行测试。在我的index.html 文件中,我有<script src="https://js.stripe.com/v2/" type="text/javascript"></script> 来获取Stripe 的代码。 但是,当我运行测试时,出现错误: ReferenceError: Can't find variable: Stripe,这是有道理的,因为我没有使用 ssl 证书运行测试命令。

我通过创建本地 js 文件并将stripe's 缩小代码复制到其中,从而覆盖了对 ssl 证书的需求并且我的测试通过了。

但是我的问题是这是否是最佳做法?

我应该创建一个 Stripesinon 模拟对象并改用它,还是将 Stripe 对象存根以防止对 Stripe API 进行任何调用更有意义?

【问题讨论】:

    标签: javascript backbone.js mocha.js stripe-payments sinon


    【解决方案1】:

    我认为这里最好记住的是关注点分离。

    Stripe 是第 3 方服务,因此我认为在单元测试中使用此类服务​​不是最明智的选择。

    这些是单元测试 - 可能是针对您的主干控制器的;所以测试应该严格地只测试控制器代码。

    因此,我将模拟控制器所需的必要对象和方法。同样这样,您的单元测试依赖项更清晰。

    【讨论】:

    • @hyprstack 是的,模拟是最好的方法......尤其是因为它会阻止真正的 Stripe.js 对 Stripe API 进行任何调用。
    • 嗨托尼。我通过执行stripeMock = sinon.mock(Stripe); 并分配var Stripe = {method: function () {} }; 创建了一个带有sinon 的模拟但是当我运行测试时,它仍然抱怨它找不到variable Stripe。如果我正在测试的代码中不存在该对象,我是否需要创建该对象?
    • @hyprstack 嘿,是的,完全正确 - 如果您定义带/不带对象的变量应该没问题。
    • 所以在测试开始时我会做var Stripe; 然后适当地向下分配模拟。
    • 这样就行了,在我的test.html 文件的脚本标签中设置对象。它允许我现在模拟对象。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 2021-06-24
    • 2021-04-19
    • 1970-01-01
    • 2014-03-30
    • 2023-01-18
    • 2019-11-26
    • 2017-09-28
    相关资源
    最近更新 更多