2015-07-08 16 views
8

Questa è la mia funzione

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

Questo è il mio gelsomino prova spec

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

ma quando provo a eseguire questo si sta aprendo una nuova scheda e non voglio che questo accada, voglio solo controllare se i valori restituiti non sono presenti !!

+1

dovrebbe essere '$ finestra 'Credo nei tuoi test, Inject' $ window' – Chandermani

+1

ho iniettato $ window ma anche si sta aprendo una nuova scheda dopo il runing –

risposta

13

Prima di tutto l'aspettativa (window.open) .toHaveBeenCalled() è nel posto sbagliato. Non puoi aspettarti prima di spiare l'evento. ormai prossimi alla tua domanda ci sono metodi diversi in gelsomino per spiare le dipendenze, come

  • .and.callThrough - Con il concatenamento spia con and.callThrough, la spia continuerà a tenere traccia di tutte le chiamate ad essa ma in aggiunta delegherà all'attuazione reale.
  • .and.callFake - Collegando la spia con and.callFake, tutte le chiamate alla spia delegheranno alla funzione fornita.
  • . And.returnValue - Collegando la spia con and.returnValue, tutte le chiamate alla funzione restituiranno un valore specifico.

Si prega di verificare Jamine doc per la lista completa

banco di prova del campione per qui di seguito secondo il vostro requisito

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

verrà

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"); 
    })); 
Problemi correlati