我是Jasmine的新手,在使用Jasmine测试
angularjs SPA时试图弄清楚如何模拟$window.sessionStorage对象.
(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'); } } })();
我正在尝试的一个简单测试就是将sessionStorage存根并为我的测试注入我的存根.
'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'); }); }); });
您可以简单地创建一个普通对象来实现您的需求,如下所示:
原文链接:https://www.f2er.com/angularjs/142295.htmldescribe("session",function() { ... beforeEach(inject(function (_session_,_$window_) { session = _session_; $window = _$window_; $window.sessionStorage = { // mocking sessionStorage getItem: function(key) { return this[key]; } }; })); ... });