使用Jasmine有效地模拟全球财产

时间:2013-04-20 17:29:29

标签: javascript angularjs google-api jasmine google-api-js-client

我的应用程序依赖于gapi javascript客户端(https://apis.google.com/js/api.js)和jsapi(https://www.google.com/jsapi)。

我使用AngularJS构建我的应用程序,并使用Karma(以前的Testacular)作为测试跑步者。

我设法通过将它们加载到Karma中来有效地模拟它们,然后使用一些方法来监视它们:

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

我想用Jasmine嘲笑它们,但实际上不包括它,但我可以弄清楚如何。 我尝试在beforeEach中创建一个存根:

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

但它仍未定义。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

将@SpoBo的评论作为答案,以解决我的问题:

export const getCount = createSelector(
  getCounterValue, 
  (counter, props) => counter * props.multiply
);

export const selectCustomer = (id: string) => createSelector(
  selectCustomers,
  customers => customers[id]
);

答案 1 :(得分:-1)

我认为您想使用注入器来获取$ window提供程序,然后您可以将模拟添加到该对象。

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