1
我想知道,在测试我的控制器时,如果在调用函数后设置了sessionStorage变量。下面是我的测试:在AngularJS的单元测试中获取sessionStorage项目
it('should be able to set language to the storage through SessionService', inject(['SessionService', function (SessionService) {
$scope.openChooseLanguage();
$scope.modalInstance.close('fr');
// What to write there ?
}]));
在我的控制器我有设置一个“郎”项目和返回值作为我SessionService的第二个参数的openChooseLanguage功能:
$scope.openChooseLanguage = function(){
if($scope.lang == '' || $scope.lang == null){
$scope.modalInstance = $modal.open({
templateUrl: 'views/modals/chooseLanguage.html',
controller: 'ChooseLanguageCtrl'
});
$scope.modalInstance.result.then(function (result) {
//Define user language in Session Storage
SessionService.set('lang', result);
}, function() {
$scope.canceled = true;
$scope.openChooseLanguage();
});
}
};
这里是我的SessionService,简单地设置,获取,取消设置,我的项目:
return {
get : function(key){
return sessionStorage.getItem(key);
},
set : function(key, val){
broadcast(key, val);
return sessionStorage.setItem(key, val);
},
unset : function(key){
return sessionStorage.removeItem(key);
}
};
那么,什么是知道如果“郎”项目已设置的解决方案?我刚开始用AngularJS和Jasmine单元测试,所以我是一个现在有点糊涂了......
UPDATE
我只是试图加入到我的测试:
beforeEach(function() {
$sessionStorage = jasmine.createSpyObj('SessionService', ['get', 'set', 'unset']);
});
it('should be able to set language to the storage through SessionService', inject(['SessionService', function (SessionService) {
$scope.openChooseLanguage();
$scope.modalInstance.close('fr');
expect($sessionStorage.set).toHaveBeenCalledWith('lang','fr');
}]));
但当运行我的测试时,我有以下错误:
预期间谍SessionService.set被调用['lang', 'fr' ],但它从未被称为
按预期工作谢谢:) – lightalex