Mocking $sessionStorage for controller testing
HTML
<script src="https://cdn.rawgit.com/jasmine/jasmine/master/lib/jasmine-core/jasmine.js"></script>
<link rel="stylesheet" href="https://cdn.rawgit.com/jasmine/jasmine/master/lib/jasmine-core/jasmine.css">
<script src="https://cdn.rawgit.com/jasmine/jasmine/master/lib/jasmine-core/jasmine-html.js"></script>
<script src="https://cdn.rawgit.com/jasmine/jasmine/master/lib/jasmine-core/boot/boot.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular-mocks.js"></script>
<script src="https://cdn.rawgit.com/scriptwerx/angular-swx-session-storage/master/release/swx-session-storage.min.js"></script>
JavaScript
// CODE
(function (angular) {
'use strict';
function MyController($sessionStorage) {
var vm = this;
vm.notifications = {
someData: $sessionStorage.get('someData')
};
vm.updateData = function(data) {
vm.notifications.someData = $sessionStorage.put('someData', data);
};
vm.resetData = function() {
$sessionStorage.remove('someData');
vm.notifications.someData = $sessionStorage.get('someData');
};
}
MyController.$inject = ['$sessionStorage'];
angular
.module('myApp', ['swxSessionStorage'])
.controller('MyController', MyController);
})(window.angular);
// SPECS
describe('myApp', function () {
'use strict';
var suite = this,
tmpStorageData = {
someData: 'HELLO' // Already populated data
},
mockSessionStorage = { // Full mock for $sessionStorage
get: function(id) {
return tmpStorageData[id];
},
put: function(id, data) {
return tmpStorageData[id] = data;
},
remove: function(id) {
delete tmpStorageData[id];
},
empty: function() {
tmpStorageData = {};
}
};
beforeEach(function() {
angular.mock.module('myApp');
angular.mock.inject(function($controller) {
suite.controller = $controller;
});
});
function createController() {
return suite.controller('MyController', {
$sessionStorage: mockSessionStorage
});
}
describe('MyController', function() {
var vm;
beforeEach(function() {
spyOn(mockSessionStorage, 'get').and.callThrough();
spyOn(mockSessionStorage, 'put').and.callThrough();
spyOn(mockSessionStorage, 'remove').and.callThrough();
...