Domanda Come testare se viene lanciata un'eccezione in AngularJS


Devo testare una direttiva e dovrebbe generare un'eccezione. Come posso verificare che l'eccezione sia stata lanciata, in gelsomino?

La funzione di collegamento delle direttive:

link: function() {
    if(something) {
        throw new TypeError('Error message');
    }
}

Non ho ancora implementato con successo un test che rileva effettivamente l'errore e segnala che il test ha avuto esito positivo.


15
2018-03-11 21:40


origine


risposte:


Ecco come lo faccio:

describe("myDirective", function() {
        it("should throw an error", inject(function ($compile, $rootScope) {
                function errorFunctionWrapper()
                {
                    $compile(angular.element("<div my-directive></div>"))($rootScope);
                }
                expect(errorFunctionWrapper).toThrow();
        }));
});

20
2018-03-11 21:54



    it("should throw an error", inject(function ($compile, $rootScope) {
        expect(function () {
            $compile(angular.element("<directive-name></directive-name>"))($rootScope.$new());
        }).toThrow();
    }));

7
2018-03-23 16:52



MODIFICARE: questo sembra essere risolto ora. Testato con Angular 1.6.4.


In Angular 1.6, non sono stato in grado di rilevare gli errori lanciati durante il $compile fase. Anche se non è elegante, posso ancora controllare contro il $exceptionHandler.errors array (fonte):

it('throws an error', function() {
  $compile(angular.element('<directive-name></directive-name>'))($rootScope.$new());
  expect($exceptionHandler.errors.length).toBeGreaterThan(0);
});

Meglio ancora, forniscilo con i messaggi di errore esatti:

expect($exceptionHandler.errors).toEqual(['first error', 'second error'])

2
2017-12-19 17:03



la gestione delle eccezioni nei test angolari viene eseguita meglio con il servizio angolare nativo

https://docs.angularjs.org/api/ng/service/$exceptionHandler

questo offre una migliore gestione delle eccezioni generate e fornisce un modo angolare nativo migliore per gestire le eccezioni a livello globale. dire se ad un certo punto nel tempo è possibile modificare la strategia di gestione delle eccezioni dell'applicazione in un unico punto.

in prova questo quando usato insieme a $ exceptionHandlerProvider

https://docs.angularjs.org/api/ngMock/provider/$exceptionHandlerProvider

ti dà una migliore gestione dell'eccezione generata e scrivi test specifici.

per i test unitari non è un modo standard in angolare per convalidare un'eccezione usando .toThrow (); metodo di gelsomino.


0
2017-09-02 00:11