Как шпионить за методами localStorage с жасмином - PullRequest
0 голосов
/ 10 мая 2018

Предположим, у меня есть код JavaScript:

function modifiesLocalStorage() {
  var someBoolean = false;
  if(localStorage.getItem('someKey') === 'true'){
    localStorage.removeItem('someKey');
    someBoolean = true;
  }
  return someBoolean;
}

Затем у меня есть тест Жасмин для проверки этого метода:

it('should return true', function(){
  spyOn(localStorage, 'removeItem');
  spyOn(localStorage, 'getItem').and.returnValue('true');
  var returnValue = modifiesLocalStorage();
  expect(localStorage.getItem).toHaveBeenCalled(); //Error in this line
  expect(returnValue).toBeTruthy();
});

при выполнении этого теста я получаю следующую ошибку: Error: <toHaveBeenCalled> : Expected a spy, but got Function. Что это за ошибка и как ее исправить?

Я использую браузер Firefox 45.9.0 в автономном режиме для запуска тестов.

1 Ответ

0 голосов
/ 10 мая 2018

Согласно ответу на этот вопрос: Ожидается шпион, но получил функцию Нам нужно перейти к фактическому методу, который в данном случае используется на proto .

если я изменю свои тесты, как показано ниже, тест пройден:

it('should return true', function(){
  spyOn(localStorage.__proto__, 'removeItem');
  spyOn(localStorage.__proto__, 'getItem').and.returnValue('true');
  var returnValue = modifiesLocalStorage();
  expect(localStorage.__proto__.getItem).toHaveBeenCalled(); 
  expect(returnValue).toBeTruthy();
});

Так как __proto__ устарел, мы также можем использовать Object.getPrototypeOf(localStorage) для получения прототипа localStorage объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...