1

我的應用程序對gapi javascript客戶端(https://apis.google.com/js/api.js)和jsapi(https://www.google.com/jsapi)有依賴關係。用Jasmine有效模擬全球房產

我用AngularJS構建我的應用程序,並使用Karma(以前稱爲Testacular)作爲Test runner。

我設法在噶加載它們和明年刺探一些方法,有效地嘲笑他們:

it('should call gapi on share', inject(function (config, doc) { 
     config.appId = 'testAppId'; 

     var shareClientMock = { 
      setItemIds: jasmine.createSpy('setItemIds'), 
      showSettingsDialog: jasmine.createSpy('showSettingsDialog') 
     }; 
     spyOn(gapi.drive.share, 'ShareClient').andReturn(shareClientMock); 

     scope.share(); 

     expect(gapi.drive.share.ShareClient).toHaveBeenCalledWith(config.appId); 
     expect(shareClientMock.setItemIds).toHaveBeenCalledWith([doc.info.id]); 
     expect(shareClientMock.showSettingsDialog).toHaveBeenCalled(); 
    })); 

我想嘲笑他們,實際上並沒有包括它,茉莉,但我可以弄清楚如何。 我試圖在beforeEach創建存根:

beforeEach(function() { window.gapi = {...} }); 

,但它仍然是不確定的。

感謝您的幫助。

回答

0

我想你想使用注入器來獲得$窗口提供者,那麼你可以添加模擬到該對象。

beforeEach(inject(function($injector){ 
    window = $injector.get('$window'); 
    window.gapi = {...}; 
}); 
+4

這是行不通的。你應該在注入之前使用一個裝飾器。也就是在提供$的模塊中。 ''''module('module',function)$ provide.decorator('$ window',function($ delegate){ $ delegate.gapi = {...}; return $ delegate; }); });'''' – SpoBo 2013-11-13 11:11:33

+1

@SpoBo,您的評論確實幫了我,我希望它更明顯。我希望你能將它作爲答案張貼,它值得一些upvotes。 – 2015-04-13 17:07:42

+1

如果您願意,請自己動手做出答案。很高興幫助你。依賴注入在測試過程中非常有用。 – SpoBo 2015-04-14 22:21:35