Comment se moquer de angularjs $de la fenêtre.sessionStorage avec le Jasmin et le Karma

Je suis nouvelle marque de Jasmin et d'essayer de comprendre comment, à se moquer de l' $de la fenêtre.sessionStorage objet lors de l'essai d'un angularjs SPA à l'aide de Jasmin.

(function() {                            
    'use strict';                        

    var serviceId = 'session';                                                  

    //Define the service on the module. 
    //Inject the dependencies.          
    //Point to the service definition function.
    angular.module('app').service(serviceId, ['$window', session]);

    function session($window) {                                                 

        var token = null;                                                       

        var service = {                  
            create: create,              
            destroy: destroy,            
            getToken: getToken,          
            read: read                   
        };                               

        return service;                  

        ...

        /**
         * Get the session token
         */
        function getToken() {
            return this.token;
        }

        /**                              
         * Read session variables from local session storage
         */                                                                     
        function read() {                
            this.token = $window.sessionStorage.getItem('token');
        }                                                                       
    }                                                                           
})(); 

Un simple test, je suis en train de faire est de simplement écraser le sessionStorage et injecter mon stub pour mon test.

'use strict';

describe("session", function() {
    var session;
    var $window;
    beforeEach(module("app"));
/*
    beforeEach(function() {
        $window = {sessionStorage: {replace: jasmine.createSpy()}};

        module(function($provide) {
            $provide.value('$window', $window);
        });
    });
*/
    beforeEach(inject(function (_session_) {
        session = _session_;
    }));

    describe("read", function() {
        it("should read session data from the window", function() {
            $window.sessionStorage.token = 'token';        
            session.read();                        

            expect(session.getToken()).toBe('token');
        });                                          
    });
});

OriginalL'auteur veilig | 2014-04-30