Некоторые из ваших тестов сделали полную перезагрузку страницы - ошибка при запуске тестов Jasmine
Я столкнулся с проблемой, когда, когда я запускаю свои тесты на Jasmine, я получаю эту ошибку ниже. Проблема в том, что это происходит, когда я пытаюсь выполнить определенное количество тестов. Кажется, он не привязан к конкретному тесту, как если бы я прокомментировал некоторые, тесты проходят. Если я раскомментирую некоторые тесты, появится ошибка. Если я прокомментирую те, которые были раскоментированы раньше, все они снова проходят. (т.е. если у меня есть красный, зеленый, синий и оранжевый тест, и он терпит неудачу, я прокомментирую оранжевый и синий цвет, а затем я раскомментирую синий и оранжевый, он снова не сработает, но если я прокомментирую красный и зеленый, он снова пройдет).
Chrome 41.0.2272 (Mac OS X 10.10.1) ОШИБКА Некоторые из ваших тестов сделали полная перезагрузка страницы! Chrome 41.0.2272 (Mac OS X 10.10.1): Выполнено 16 из 29 (1 НЕИСПРАВНО) ОШИБКА (0,108 сек /0,092 сек)
Я в тупике, что происходит. Чем больше тестов я добавляю, тем это становится проблемой. Кто-нибудь сталкивался с этим раньше? Я понятия не имею, что может быть причиной этого, поскольку ничто в любом из моих тестов не делает никакого перенаправления, и все они проходят универсально на машине других лиц.
Ответы
Ответ 1
В моем случае проблема заключалась в том, что в моем исходном коде у меня был код, непосредственно устанавливающий href на объект location, например window.location.href= 'where';
В моих спецификациях я настроил прослушиватель onbeforeunload, который просто возвращает строку, а не разрешает перенаправление:
beforeAll(() => {
window.onbeforeunload = () => 'Oh no!';
});
Ответ 2
Убедитесь, что ваши тесты правильно изолируют все тестируемые модули с помощью mocks/spies. Поведение, которое вы видите, говорит мне, что ваши тесты действительно не работают изолированно - они меняют какое-то состояние где-то, что вызовет перезагрузку.
Ответ 3
Предположим, вы используете window.location
где-то в вашем целевом коде. Чтобы пройти его, просто создайте шпиона для window.onbeforeunload
Пример:
window.onbeforeunload = jasmine.createSpy();
Или даже лучше использовать $window
вместо этого, и этого не произойдет.
Ответ 4
Попробуйте уменьшить количество разделов describe
или полностью удалить их. Я не знаю почему, но это работает для меня.
Ответ 5
Недавно я столкнулся с этой ошибкой с кармой 0.13.12. Я обновился до Карма 0.13.14, и мои тесты снова работают. Проблема для меня (и, вероятно, также для @mqklin) была связана с https://github.com/karma-runner/karma/issues/1656 и https://github.com/jasmine/jasmine/issues/945.
Ответ 6
Для меня работала модернизация Кармы с 1.4.0 до 1.4.1 и изменение максимального значенияSpecCallbackDepth в моем файле jasmine.js от 20 до 100.
Ответ 7
Вам также необходимо убедиться, что модули не загружаются дважды. В моем случае у меня был файл модуля AngularJS - например, auth.controller.js
, содержимое которого уже было включено в файл core.js
. Как только я исключил связанные файлы в карме, ошибка исчезла.
Ответ 8
Я использовал setTimeout(() => window.location.replace('/'), 10);
Я использовал код ниже в моем unit test, и это сработало для меня.
spyOn(global, 'setTimeout');
Ответ 9
создание шпиона в функции, которая имеет window.location/reload, исправила проблему для меня
Ответ 10
Надеюсь, что вы использовали window.location = "some url"
в своем коде;
Столкнулась с подобной проблемой и была решена с использованием приведенных ниже изменений.
Заменено window.location в коде с помощью
window.location.assign("some url");
Сделайте следующее в unit test:
spyOn(window.location, "assign").and.callFake(() => {
// Dummy assign call - so that your actual call will be faked and the reload will not happen.
});