У меня есть несколько неудачных тестов, которые только выводят [object ErrorEvent] thrown
. Я не вижу в консоли ничего, что помогло бы мне определить проблемный код. Что мне нужно сделать, чтобы их отследить?
[РЕДАКТИРОВАТЬ]: Я использую Karma v1.70, Jasmine v2.7.0
angular
angular-cli
karma-jasmine
Даррелл Брогдон
источник
источник
[object ErrorEvent] thrown
буквально все, что он говорит. Нет ничего ни до, ни после.it()
наfit()
, даже если выполняется только этот единственный тест, ошибка все равно будет выдаваться. Какие-либо рекомендации по отладке для этого типа ошибки?Ответы:
В качестве быстрого исправления вы можете попробовать запустить свои тесты без исходных карт :
CLI v6.0.8 и выше
--source-map=false
CLI v6.0.x ранние версии
--sourceMap=false
CLI v1.x
--sourcemaps=false
По этому поводу есть открытая проблема https://github.com/angular/angular-cli/issues/7296
ОБНОВЛЕНИЕ : у меня тоже была эта проблема, поэтому я просто перешел на последнюю версию cli и убедился, что все пакеты обновлены,
package.json
также я полностью переустановил,node_modules
так что теперь проблема исчезла.источник
--sourceMap=false
вроде работает.Если sourcemap = false не помогает, попробуйте 1) открыть браузер, в котором запущены тесты 2) нажмите кнопку отладки 3) откройте консоль
Ошибка будет там
источник
--sourcemaps=false
меня вещь не работала, но работала безупречно! Спасибо!Попробуйте, если вы получите более информативное сообщение об ошибке, запустив тест с терминала, например:
В своем тесте вы можете заменить
с участием
Теперь будут запускаться только тесты, которым предшествует fit . Чтобы оставить браузер открытым после запуска теста, запустите тест следующим образом:
Лично я сталкивался с этой ошибкой дважды. Оба срабатывали только при вызове fixture.detectChanges ().
В первый раз я решил это, используя более безопасную интерполяцию строк в моем файле .html.
Небезопасный пример:
Пример безопасного (r) (обратите внимание на вопросительный знак):
То же самое может относиться к привязке свойств:
Во второй раз я использовал DatePipe в моем .html файле, но фиктивное свойство, в котором я его использовал, не было датой.
.html файл:
Файл .ts (mock-data) ( неверный ):
Файл .ts (mock-data) ( правильный ):
источник
Это связано с тем, что фреймворк jasmine не может обрабатывать тип ErrorEvent, поэтому он не извлекает сообщение об ошибке и
error.toString()
вместо этого вызывает этот объект.Я только что зарегистрировал проблему в репозитории jasmine https://github.com/jasmine/jasmine/issues/1594
Пока это не исправлено, вы можете временно исправить установленный пакет jasmine в папке node_modules. В моем случае это
node_modules/jasmine/node_modules/lib/jasmine-core/jasmine.js
а затем измените реализацию ExceptionFormatter из этого
к этому
Это помогает определить проблему.
источник
node_modules/jasmine_core/lib/jasmine_core/jasmine.js
uncaught
для меня, что не помогло. Поэтому я добавил код для печатиerror
объекта и его свойств.if(error){ // message+=error; for(var propName in error) { propValue = error[propName] message+='error prop: '+propName+', value: '+propValue; } }
. Это предоставило дополнительную информацию, которая помогла мне в отладке - напримерerror prop: filename, value: blob:http://localhost:9881/11777e3a-28d8-414e-9047-cee7d328e843
Для меня это было связано с выполнением обещания в
ngOnInit
компоненте. Я должен был использоватьasync
,fakeAsync
и тик, а также гася службу асинхронной сspyOn
Angular - Как выполнить модульное тестирование компонента с помощью асинхронного вызова службы
источник
TL; DR: это может быть связано с тестированием маршрутизации.
Я
[object ErrorEvent] thrown
тоже получаю . Через час проследил до одной строчки кода.Проблема заключается в том, что тестовая среда пытается выполнить оценку
this.route.snapshot.paramMap.get('id')
.Если я заменю его на
0
,[object ErrorEvent] thrown
исчезнет.В моем userService есть такой пользователь:
Так
0
что просто получает этого пользователя по индексу0
.В противном случае при обычном запуске моего приложения
this.route.snapshot.paramMap.get('id')
выполняется оценка, когда пользователь выбирает пользователя для редактирования из моей таблицы пользователей.Итак, в моем HTML
*ngFor="let user of users; index as i"
циклы для отображения всех пользователей, а затемrouterLink="/edit/{{i}}"
вы можете нажимать кнопки редактирования для каждого пользователя, которые при нажатии переходят, например,http://localhost:4200/edit/0
к редактированию вышеупомянутых данных администратора.источник
как насчет очистки после каждого теста:
источник
У меня такая же проблема. Одна из причин возникновения этой ошибки - это когда вы пытаетесь получить доступ к чему-либо в шаблоне, равному нулю или неопределенному. Убедитесь, что у вас есть проверка безопасности для этой переменной.
Например, это вызовет [объект: ErrorEvent], если конфигурация не определена при загрузке компонента.
template.html
Сделай это вместо
источник
Что может помочь, так это если у вас открыто окно Chrome для вашего тестового запуска Karma, чтобы открыть инструменты разработчика и проверить там консоль. Для меня это помогло мне узнать, что приложение не может использовать метод Array.findIndex в неопределенном массиве (поскольку структура данных была организована строкой даты, например data [2018] [3] [28] и Я указал не на ту дату), но все же вместо того, чтобы просто остановиться на ошибке, тест продолжал работать.
источник
Для меня проблема заключалась в том, что у меня был тест, в котором я случайно использовал библиотеку auth0-lock .
источник
Это оказалось асинхронной проблемой, потому что после того, как я добавил достаточно
it
s в одну из моих спецификаций компонента, я смог получить полезное сообщение об ошибке, которое указывало на файл и строку в этом файле (это было связано сparamMap
.В спецификации, которая тестировала ParamMap, я только что добавил:
источник
У вас может быть гонка или асинхронный тест, который настроен неправильно или используется неправильно. Я бы предположил, что случай отладки должен быть исправлен, и проигнорировал бы передачу командной строки. Просто продолжайте обновлять средство запуска теста кармы (браузер) на случай, если ошибка
[object ErrorEvent] thrown
появляется периодически, затем убедитесь, что вы правильно выполнили условие асинхронности.Надеюсь, это сработает.
источник
Эта ошибка показывает, что у вас что-то не определено. По моему опыту, самый простой способ отладить это:
источник
[object ErrorEvent] thrown
до этого удаленного метода пропажи только благодаря console.log :)В моем случае проблема была в сервисе, так как один из объектов не определился во время выполнения тестов.
Пример кода службы выглядел примерно так, как показано ниже: доступ к dom,
Спецификации, относящиеся к этой службе, не работали с ошибкой « [объект ErrorEvent] брошен ».
Я издевался над своим сервисным объектом во всех спецификациях, которые относились к этому, и проблема была решена.
Мок-сервис
И используйте этот фиктивный объект службы в поставщиках, как показано ниже,
источник
Я использовал прокси в своем приложении, определенном в proxy.conf.json, например:
Поскольку Karma не знала об этом прокси, она продолжала выдавать ошибки в консоли, что конечная точка API не может быть найдена. Поэтому, просмотрев документацию Karma, я обнаружил, что могу добавить свойство proxies в karma.conf.js с тем же объектом из proxy.conf.json:
Ошибка в консоли исчезла, и [объект errorEvent] больше не генерировался.
источник
В конце концов, что может у меня сработало:
источник