【问题标题】:mock StripeCheckout in Jasmine test在 Jasmine 测试中模拟 StripeCheckout
【发布时间】:2016-06-23 03:30:29
【问题描述】:

我正在为我的 Javascript 应用程序编写 Jasmine 测试。一个主要的时间槽一直在测试我的依赖于 StripeCheckout 的代码。 Stripe 不希望您离线使用它。我意识到我应该模拟服务,但在 Jasmine 中这并不容易。

如何模拟 StripeCheckout 的“自定义”(而不是“简单”)用法?

我尝试使用spies,就像这样,

var StripeCheckout = jasmine.createSpyObj('StripeCheckout', ['configure']);

但我认为创建的对象需要附加到全局对象(窗口)。

  • 所以,我可以add an object to the global object。这行得通, 但感觉很蹩脚。

  • 另一种选择是告诉 Karma 加载 网络上的页面。这对我有用,但做起来似乎很蹩脚 用于测试的网络请求。

【问题讨论】:

    标签: jasmine stripe-payments karma-jasmine


    【解决方案1】:

    我不确定你是否已经弄清楚了,但一个简单的方法是为 StripeCheckout 创建一个简单的模拟实现。像这样的东西应该工作。

    beforeEach(function() {
        module(function($provide) {
            $provide.factory('StripeCheckout', function() {
                //your mocked custom implementation goes here
    
                configure: function() {
                    //do something   
                }
            }
        }
    
        inject(function($injector) {
            StripeCheckoutMock = $injector.get('StripeCheckout');
        }
    )
    

    这样您就不会为了运行测试而发出请求。测试将只使用您设置的模拟服务。

    【讨论】:

    • 我还没有弄清楚这一点。我使用了一些不太理想的解决方案。有趣的想法 - 在测试中添加一个 Angular 服务。我想我应该包装window.StripeCheckout 并使我的角度代码使用 DI 作为 StripeCheckout 符号。我正在使用 Angular,但我正在寻找不需要 Angular 的解决方案。
    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多