Как смоделировать window.location.href в модульном тесте Backbone Marionette? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть функция, которая, когда ничего не находит в куки, перенаправляет на какую-то страницу, указанную как:

showEnrollRoute: function(){`*enter code here*`
            var username = Application.utils.getCookie("username");
            if(username != null || username != undefined){
                Application.vent.trigger("refresh:header");
                var channel = module.getChannel("counties");
                channel.then(function(channel){
                    channel.request("fetQuestions");
                }); 
            } else {
                console.log("Start");
                window.location.href= Application.getConfig("logoutSuccess");//error point
                console.log("End");
            }   
        }

window.location.hrefвызывает сбой юнит-тестов.

Некоторые из ваших тестов полностью перезагрузили страницу.

Я провел некоторое исследование и обнаружил, что мне нужно смоделировать объект $ window в юнит-тесте.предотвратить перезагрузку страницы при запуске тестов?

Кто-нибудь может предложить, пожалуйста, способ сделать это?Заранее спасибо!

РЕДАКТИРОВАТЬ: Эта проблема та же, но вопрос теперь другой.Я обнаружил, что насмешка над объектом $ window внутри тест-кейса предотвратит возникновение ошибки.Кто-нибудь может предложить, пожалуйста, способ пойти по этому поводу?

1 Ответ

0 голосов
/ 17 июля 2018

Лучше всего это заменить location.href на метод установки, предоставляемый объектом местоположения.

Используйте location.assign(<URL>), если вы хотите, чтобы пользователь мог вернуться в историю, илиlocation.replace(<URL>), чтобы избежать записи истории браузера.

.assign ()

.replace ()

Теперь выВы можете использовать эти функции в своих тестах.Либо с ручным переопределением, либо с использованием фиктивной библиотеки, такой как sinonjs .

Тест может выглядеть следующим образом:

it('should call correct URL', () => {
  const expected = '<URL>';

  sinon.stub(location, 'assign');

  // other setup if required

  showEnrollRoute();

  expect(location.assign).toHaveBeenCalledWith(expected);

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