2013-08-27 21 views
5

Ho i seguenti test unitari e per qualche motivo il secondo test fa fallire altri test.AngularJS Test unità gelsomino

beforeEach(inject(function ($rootScope, _$httpBackend_, $controller, $location, mockedResource) { 
    scope = $rootScope.$new(); 
    httpBackend = _$httpBackend_; 
    locationService = $location; 

    ctrlDependencies = { 
     $scope: scope, 
     resource: mockedResource, 
    } 

    var ctrl = $controller('myController', ctrlDependencies); 
})); 

it('should redirect to a new page', function() { 
    scope.pageRedirectFunction(); 
    expect(locationService.path()).toBe('/newpage') 
}); 

it('should delete an epic resource', function() { 
    httpBackend.expectGET('/api/v1/epic/1').respond({}); 
    httpBackend.expectDELETE('/api/v1/epic/1').respond({}); 

    // Run the deletion function 
    scope.deleteEpicResource() 

    httpBackend.flush() // This line seems to be the rebelious one 

    expect(scope.epicResources.length).toEqual(0) 
}) 

sono riuscito a capire la linea che sembra causare gli errori, ed è la linea httpBackend.flush(). Perché la funzione flush causa un comportamento strano?

L'errore effettivo che ricevo da eseguendo il comando karma start nel terminale, è:

Delaying execution, these browsers are not ready: Chrome 29.0 .... 

dopo un po 'di tempo, la sessione di Chrome si blocca poi.

+0

Che errore hai avuto? Senza di questo nessuno può nemmeno immaginarlo. – zsong

+0

Ovviamente! Che terribile errore. Aggiornamento con l'errore ora ... – Sneaksta

+0

Cerca di aumentare il livello di log di Karma per eseguire il debug, per vedere cosa succede. – madhead

risposta

2

Una punta poco conosciuto sui test/beffardo richieste asincrone con gelsomino e AngularJS:

Se non stai chiamando esplicitamente richiesta nella vostra prova (cioè chiamando attraverso un'altra funzione), la richiesta non sarà digerito da angolare, in modo che fa sembrare come se la richiesta mai sparato (quando si chiama flush())

provare ad eseguire scope.$digest() prima httpBackend.flush() chiamata, che può fare il trucco Vedi this thread per ulteriori informazioni.

+0

Ho risolto il problema un po 'indietro, ma non ricordo come ho risolto esso. Leggendo la tua risposta mi sono reso conto che non stavo chiamando flush() per tutte le richieste di cui avevo bisogno. Questo era principalmente un problema perché c'erano richieste API che venivano caricate non appena il mio controller veniva caricato, ma mi ero dimenticato di loro. – Sneaksta

+0

L'aggiunta di $ digest() risolve il problema relativo all'arresto anomalo di Chrome? – kfitzpatrick

0

Avete angular-mocks.js incluso prima dei test? Inoltre, si consiglia di provare a caricare il modulo ngMocks:

beforeEach(module("ngMock")); 
Problemi correlati