Жасмин макет window.location.reload (true); - PullRequest
0 голосов
/ 28 июня 2018

У меня есть конструктор объекта js, который выглядит следующим образом:

function SomeThing(window, document) {
   var self = this;
   self.window = window;
   self.document = document;

   if (!self.window.sessionStorage.getItem('page-reloaded')) {
      self.window.sessionStorage.setItem('page-reloaded', true);
      self.window.location.reload(true); // PROBLEM ON THIS LINE
      return;
   }
}

мой пробный тест выглядит так:

beforeEach(function() {
  mockWindowObj = {
    'location': {
        'href': '',
        'search': '?hello=world',
        'pathname': '/some/path',
        'replace': function () {},
        'reload': jasmine.createSpy()
      }
   };

  spyOn(mockWindowObj.location, 'reload').and.callFake(function(){}); ;

  some = new SomeThing(mockWindowObj, mockDocumentObj);
});

Когда я запускаю тест, я получаю эту ошибку:

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
 {
   "message": "Some of your tests did a full page reload!",
   "str": "Some of your tests did a full page reload!"
 }

Если я закомментирую строку window.location.reload(true), все мои тесты пройдут нормально и пройдут успешно. Я новичок в модульных тестах, и я не уверен, как обойти это. Любая помощь будет очень высоко ценится. Заранее спасибо.

1 Ответ

0 голосов
/ 29 июня 2018

Ваш опубликованный код не может быть тем, что вы на самом деле использовали. Строка, содержащая self.window.sessionStorage.getItem, должна была завершиться сбоем, так как вы не определили sessionStorage в макете.

Я предполагаю, что функция SomeThing вызывается с окном, указывающим на реальный объект окна. Это объясняет то, что вы наблюдаете.

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