2015-08-11 16 views
5

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?

risposta

6

Non ho familiarità con la libreria di progettazione materiale, ma sembra che $mdSidenav restituisca una funzione.

Perché non sostituire: $provide.value('$mdSidenav', mdSidenav); con

$provide.factory('$mdSidenav', function() { 
     return function(direction){//if you use direction ('left' in your example) you could use it here 
       return mdSidenav; 
       }; 
}) 
+1

Funziona! Non ho mai pensato di realizzare una fabbrica che fosse in realtà una funzione in sé. Grazie! :) – jbernal

Problemi correlati