2015-07-08 13 views
8

Dies ist meine Funktion

$scope.buildForm = function (majorObjectId, name) { 
     $window.open("/FormBuilder/Index#/" + $scope.currentAppId + "/form/" + majorObjectId + "/" + name); 
    }; 

Das ist mein Jasmin Test spec ist

  it('should open new window for buildForm and with expected id', function() { 
      scope.majorObjectId = mockObjectId; 
      scope.currentAppId = mockApplicationId; 
      var name = "DepartmentMajor"; 
      scope.buildForm(mockObjectId, name); 
      scope.$digest(); 
      expect(window.open).toHaveBeenCalled(); 
      spyOn(window, 'open'); 
      spyOn(window, 'open').and.returnValue("/FormBuilder/Index#/" + scope.currentAppId + "/form/" + scope.majorObjectId + "/" + name); 
     }); 

aber wenn ich versuche, dies zu laufen ist eine neue Registerkarte öffnen und Ich möchte nicht, dass dies geschieht, ich möchte nur überprüfen, ob die angegebenen returnValues ​​nicht vorhanden sind !!

+1

sein, es '$ Fenster sein sollte 'Ich glaube an Ihre Tests, Inject' $ window' – Chandermani

+1

Ich habe $ window injiziert, aber selbst nach dem Ausführen wird eine neue Registerkarte geöffnet –

Antwort

13

Zuerst ist Ihre Erwartung (window.open) .toHaveBeenCalled() an falscher Stelle. Sie können nicht erwarten, bevor Sie das Ereignis ausspionieren. Nun zu Ihrer Frage kommenden gibt es verschiedene Methoden in Jasmin auf Abhängigkeiten auszuspionieren, wie

  • .and.callThrough - Durch den Spion mit and.callThrough verketten, wird der Spion noch alle Anrufe, es aufzuspüren aber zusätzlich wird es an die tatsächliche Implementierung delegieren.
  • .and.callFake - Durch Verkettung des Spions mit and.callFake werden alle Anrufe an den Spion an die angegebene Funktion delegiert.
  • .and.returnValue - Durch Verketten des Spions mit and.returnValue geben alle Aufrufe der Funktion einen bestimmten Wert zurück.

Bitte überprüfen Jamine doc für eine vollständige Liste

Beispieltestfall für unten nach Ihren Anforderungen

$scope.buildForm = function() { 
     $window.open("http://www.google.com"); 
    }; 

it('should test window open event', inject(function($window) { 
     spyOn($window, 'open').and.callFake(function() { 
      return true; 
     }); 
     scope.buildForm(); 
     expect($window.open).toHaveBeenCalled(); 
     expect($window.open).toHaveBeenCalledWith("http://www.google.com"); 
    })); 
Verwandte Themen