Привет У меня есть служба углов, которая использует другую службу, которая загружает данные из локального хранилища в init.cant update jasmine spy
angular
.module('app')
.factory('localStorage', function ($window)
{
if (!$window.localStorage)
{
// throw Error
}
return $window.localStorage;
});
angular
.module('app')
.factory('session', function (localStorage)
{
var container = JSON.parse(localStorage.getItem('sessionContainer'));
return {
getUser: getUser
};
});
Теперь я хочу протестировать сеансовую службу.
describe('SessionService', function()
{
var service;
var localStorageMock;
// Load the module.
beforeEach(module('appRegistration'));
// Create mocks.
beforeEach(function()
{
logMock = {};
localStorageMock = jasmine.createSpyObj('localStorageServiceMockSpy', ['setItem', 'getItem']);
localStorageMock.getItem.and.returnValue('{}');
module(function ($provide)
{
$provide.value('localStorage', localStorageMock);
});
inject(function (_session_)
{
service = _session_;
});
});
it('should call `getItem` on the `localStorageService` service', function()
{
expect(localStorageMock.getItem).toHaveBeenCalledWith('sessionContainer');
});
describe('getUser method', function()
{
it('should return an empty object when the user is not set', function()
{
var result = service.getUser();
expect(result).toEqual({});
});
it('should return the user data', function()
{
// localStorageMock.getItem.and.returnValue('{"user":{"some":"data"}}');
var result = service.getUser();
expect(result).toEqual({some: 'user data'});
});
});
});
Как вы можете видеть в разделе should return the user data
. Мне нужен способ обновить container
, так getUser
возвращает ожидаемые данные.
Я попытался обновить шпионаж getItem
, но это не сработает. localStorageMock
уже введен в службу session
, когда я хочу изменить шпиона.
Любая помощь?
Простое решение идеально. Благодарю. Вы получите голосование, если вы измените свой ответ на ES5 – WitteStier
Если вы используете функцию стрелки, они хороши в примерах для их удобочитаемости, я заменил ее на обычную. – estus