如何在Angular中正确模拟和测试$ window.variable?

时间:2016-04-11 14:20:09

标签: angularjs jasmine

也许我没有清楚地看到它,但我想知道:

  

如何模拟和测试$window变量?

我在以下函数中使用$window

vm.showCampaignDetails = function(campaignId) {
  vm.someFunction({ position:$window.pageYOffset });
  $state.go('campaignDetails', { campaignId: campaignId });
};

我在视图中点击了ng-click来调用showCampaignDetails:

<button ng-click"vm.showCampaignDetails(campaignID)">Details</button>
  

现在我想对这个功能进行单元测试。但不管我做什么,我   无法模仿$window.pageYOffset的价值。

我试图通过该功能传递它,但这似乎很愚蠢。

那么,方法怎么样?

这是我的测试:

it('should navigate to campaign details and save the scrolling position', function () {
  spyOn(vm, 'someFunction');
  spyOn($state, 'go');

  $window.pageYOffset = 1998;

  vm.showCampaignDetails(13);

  expect(vm.someFunction).toHaveBeenCalledWith({ position: 1998 });
  expect($state.go).toHaveBeenCalledWith('campaignDetails', { campaignId: 13});
});

1 个答案:

答案 0 :(得分:4)

你可以模拟$ window依赖:

var windowMock = { pageYOffset: 0 };

beforeEach(module(function($provide) {
     $provide.value('$window', windowMock);
  }));