2016-06-18 201 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