Подтвердить что ты не робот

Некоторые из ваших тестов сделали полную перезагрузку страницы - ошибка при запуске тестов 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 сек)

Я в тупике, что происходит. Чем больше тестов я добавляю, тем это становится проблемой. Кто-нибудь сталкивался с этим раньше? Я понятия не имею, что может быть причиной этого, поскольку ничто в любом из моих тестов не делает никакого перенаправления, и все они проходят универсально на машине других лиц.

4b9b3361

Ответ 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 или полностью удалить их. Я не знаю почему, но это работает для меня.

Ответ 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. 
});