Javascript Jasmine中未定义会话存储

Javascript Jasmine中未定义会话存储,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,我按照以下步骤设置会话存储: 但无论我做了什么,我的会话存储仍然没有定义。我可以进入storageMock(),但当我退出时,它仍然是未定义的。我做错了什么 代码如下: /// <reference path="../angular.js" /> /// <reference path="../angular-mocks.js" /> /// <reference path="../angular-animate.js" /> /// <referenc

我按照以下步骤设置会话存储:

但无论我做了什么,我的会话存储仍然没有定义。我可以进入storageMock(),但当我退出时,它仍然是未定义的。我做错了什么

代码如下:

/// <reference path="../angular.js" />
/// <reference path="../angular-mocks.js" />
/// <reference path="../angular-animate.js" />
/// <reference path="../angular-ui/ui-bootstrap.js" />
/// <reference path="../angular-ui/ui-bootstrap-tpls.js" />

/// <reference path="../../../bluescopebuildings/app/app.js" />
/// <reference path="../../../bluescopebuildings/app/applicationapp.js" />


describe('Controller: applicationController', function () {
    // Storage Mock
    function storageMock() {
        var storage = {};

        return {
            setItem: function (key, value) {
                storage[key] = value || '';
            },
            getItem: function (key) {
                return storage[key] || null;
            },
            removeItem: function (key) {
                delete storage[key];
            },
            get length() {
                return Object.keys(storage).length;
            },
            key: function (i) {
                var keys = Object.keys(storage);
                return keys[i] || null;
            }
        };
    };
    var applicationCtrl, $scope, $window;


    beforeEach(function () {
        module('main');

        // INJECT! This part is critical
        // $rootScope - injected to create a new $scope instance.
        // $controller - injected to create an instance of our controller.
        // $q - injected so we can create promises for our mocks.
        // _$timeout_ - injected to we can flush unresolved promises.
        inject(function ($rootScope, $controller, $q, _$timeout_,_$window_) {
            $scope = $rootScope.$new();
            $timeout = _$timeout_;
            $window = _$window_;
            $window.sessionStorage = {};
            $window.sessionStorage = storageMock();
            $window.sessionStorage.setItem('userName', 'Thao');
            $window.sessionStorage.setItem('userID', 10);
            $window.sessionStorage.setItem('profileID', 25);

            applicationCtrl = $controller('applicationController', {
                $scope: $scope,
                $window: $window
            });
        });
    });

    it('should return profile', function () {
        //$scope.currentUserID = 10;
        //$scope.currentUserName = 'Thao';
        //$scope.currentJobID = 62;
        //$scope.profile = null;

        $scope.GetProfile();
        expect($scope.profile).not.toBe(null);
    });
});
//
/// 
/// 
/// 
/// 
/// 
/// 
描述('Controller:applicationController',函数(){
//存储模拟
函数storageMock(){
var存储={};
返回{
setItem:函数(键、值){
存储[键]=值| |“”;
},
getItem:函数(键){
返回存储器[键]| |空;
},
removeItem:功能(键){
删除存储器[键];
},
获取长度(){
返回对象。键(存储)。长度;
},
关键词:功能(一){
var keys=Object.keys(存储);
返回键[i]| | null;
}
};
};
var applicationCtrl、$scope、$window;
beforeach(函数(){
模块(“主”);
//注射!这部分很关键
//$rootScope-注入以创建新的$scope实例。
//$controller-注入以创建控制器的实例。
//$q-注入,因此我们可以为我们的模拟创建承诺。
//_u$timeout_u-注入到我们可以刷新未解决的承诺。
注入(函数($rootScope、$controller、$q、\$timeout、\$window){
$scope=$rootScope.$new();
$timeout=$timeout;
$window=\$window;
$window.sessionStorage={};
$window.sessionStorage=storageMock();
$window.sessionStorage.setItem('userName','Thao');
$window.sessionStorage.setItem('userID',10);
$window.sessionStorage.setItem('profileID',25);
applicationCtrl=$controller('applicationController'{
$scope:$scope,
$window:$window
});
});
});
它('should return profile',function(){
//$scope.currentUserID=10;
//$scope.currentUserName='Thao';
//$scope.currentJobID=62;
//$scope.profile=null;
$scope.GetProfile();
expect($scope.profile).not.toBe(null);
});
});
我在没有调用storageMock()的情况下进行了尝试,但仍然不起作用。
谢谢

我怀疑您正在测试的代码只是调用了
sessionStorage
而不是
window.sessionStorage
。你认为这可能是问题所在吗?如果是这样,您的模拟应该设置为:
$rootScope.sessionStorage
,而不是
$window.sessionStorage