Sto costruendo un'app angolare utilizzando il material design. Sto usando il servizio $ mdSidenav per giocare con un sidenav che dovrebbe essere in grado di aprire e chiudere insieme ai desideri dell'utente.
ho creato un servizio di wrapper in questo modo:
(function() {
'use strict';
angular
.module('app.layout')
.factory('navigationService', navigationService);
navigationService.$inject = ['$mdSidenav'];
function navigationService($mdSidenav) {
var factory = {};
factory.toggle = toggle;
return factory;
//////////
function toggle() {
$mdSidenav('left').toggle();
}
}
}());
Fin qui tutto bene e funziona benissimo. Il problema arriva quando provo a scrivere i miei test unitari usando Jasmine. Generalmente creo stub o spie per deridere le mie dipendenze ma non riesco a farlo con questo $ mdSidenav a causa del modo strano di usarlo: $ mdSidenav (sidenav-id).
Di solito, con Jasmine per spiare hai bisogno e oggetto e la funzione che vuoi deridere per spiarlo. Ho provato diverse possibilità con un po 'di fortuna.
Quello che mi propongo è qualcosa di simile a:
beforeEach(module(function ($provide) {
mdSidenav = {};
mdSidenav.toggle = jasmine.createSpy();
$provide.value('$mdSidenav', mdSidenav);
}));
beforeEach(inject(function(_navigationService_) {
navigationService = _navigationService_;
}));
it('Should call $mdSidenav toggle when required', function() {
// act
navigationService.toggle();
// assert
expect(mdSidenav.toggle).toHaveBeenCalled();
});
c'è un modo per verificare questo?
Funziona! Non ho mai pensato di realizzare una fabbrica che fosse in realtà una funzione in sé. Grazie! :) – jbernal