2016-03-29 9 views
4

Ich habe den folgenden Code in einer einfachen Direktive Link-Funktion, die für eine Fenstergröße sucht und eine Funktion aufruft.

return { 
    restrict: 'A', 
    link: function (scope) { 
     angular.element($window).on('resize', function() { 
      scope.getSize(); 
     }); 

     scope.getSize() = function() { 
      return true; 
     }; 
    } 
} 

Ich versuche, auf ($window).on('resize') zu testen, dass scope.getSize() genannt wird.

In meinen Tests kompilieren ich meine Anweisung wie folgt:

beforeEach(inject(function($rootScope, $compile, _$window_) { 
    $window = _$window_; 
    $scope = $rootScope.$new(); 
    element = angular.element('<div data-watch-resize></div>'); 
    element = $compile(element)($scope); 
    $scope.$digest(); 
})); 

ich auf der Resize-Funktion des Fensters dann auszuspionieren, und erwarten, dass die Funktion

spyOn($window, 'resize'); 
$window.innerWidth = 1026; 
$scope.$digest(); 
expect(element.scope().getSize()).toHaveBeenCalled(); 

aber ich die bekommen genannt worden zu sein Fehler folgende

Error: resize() method does not exist

ich bin nicht wieder Verbündeter sicher, warum es nicht existiert, gibt es etwas Offensichtliches, das ich falsch mache?

+0

u wahrscheinlich braucht eine gefälschte Funktion für Resize-Methode zu schaffen, wie es eine dom Methode ist. –

+0

Ich habe versucht, 'SpyOn ($ window, 'resize') .und.callFake (function() { // mach etwas});' aber das scheint nicht zu funktionieren – gardni

+0

vielleicht versuchen, $ window zu ändern. innerWidth zweimal, also gibt es tatsächlich eine Größenänderungsaktion? –

Antwort

6

, wenn jemand auf etwas ähnliches klemmt:

it('should expect scope.getSize() to have been called on window resize', function() { 
    spyOn(element.isolateScope(), 'getSize'); 
    $window.innerWidth = 1026; 
    angular.element($window).triggerHandler('resize'); 
    $scope.$digest(); 
    expect(element.isolateScope().getSize).toHaveBeenCalled(); 
}); 
+0

Danke. Ich habe eine fast identische Direktive und einen Test konfiguriert, aber ich erhalte diesen Fehler: 'konnte kein Objekt finden, das für getSize() ausgespiont wurde 'Hast du das überhaupt bemerkt? – isherwood

+0

@isherwood würde vorschlagen, was Sie anrufen, existiert nicht? das Äquivalent oben wäre element.isolateScope() wäre nicht da – gardni

+0

Ich habe nie den Spion zur Arbeit gebracht, aber ich habe es geschafft, indem ich den Spion entfernt habe und einfach nach den Klassenänderungen gesucht habe, die ich nach der Kompilierung erwartet habe. – isherwood