2016-04-11 2 views
2

Может быть, я не вижу, это ясно, но интересно:

Как издеваются и протестировать $window переменную?

Я использую $window в следующей функции:

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

Я называю 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}); 
}); 

ответ

4

Вы можете издеваться зависимость $ окна:

var windowMock = { pageYOffset: 0 }; 

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

ARGH, быстрее меня! Отличная работа :) – trollr

Смежные вопросы