2016-06-18 91 views
1

我正在为我的Javascript应用程序编写Jasmine测试。一个主要的时间接收器一直在测试我的代码,这取决于StripeCheckout。 Stripe不希望您脱机使用它。我意识到我应该嘲笑这项服务,但这在茉莉花里并不容易。在茉莉花测试中模拟StripeCheckout

我该如何模拟“定制”(而不是“简单”)使用StripeCheckout

我试图用spies,像这样,

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

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

  • 所以,我可以add an object to the global object。这工作, 但它感觉跛脚。

  • 另一种选择可能是告诉 Karma通过网络加载 页面。这对我来说很有效,但让 成为测试的网络请求似乎很失败。

回答

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'); 
    } 
) 

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

+0

我还没有弄清楚这一点。我使用了一些不太理想的解决方案。有趣的想法 - 在测试中添加一个Angular服务。我想我应该包装'window.StripeCheckout'并让我的角码使用DI作为StripeCheckout符号。我正在使用Angular,但我正在寻找一种不需要Angular的解决方案。 – cyrf