У нас есть угловое приложение среднего размера, в настоящее время около 700 юнит-тестов.Несколько недель назад начались прекрасные испытания.Даже более странно: запуск тестов дважды может привести к разным результатам, то есть разные тесты могут сломаться.В консоли мы всегда находим ошибку:
Uncaught TypeError: Вы указали 'undefined', где ожидался поток.
Но трассировка стека не дает подсказкигде на самом деле находится корень ошибки (см. конец этого поста).Трассировка стека показывает соединение с оператором mergeMap
, но оказывается, что мы используем этот оператор не там, где в нашем приложении, и нигде в наших тестах.
Я прошел все спецификации и позволил им работатьсвои (с fdescribe
).Каждый файл спецификаций проходит без ошибок.Запуск их всех вместе приводит к описанной поломке.
Конечно, я предположил, что мы столкнулись с проблемой асинхронности, поэтому я приложил усилия, чтобы пройти все тесты и обернуть каждый из них в асинхронную среду.Я также проверил, что каждая подписка в какой-то момент отписывается - это имело место для нашего приложения, но не всегда для наших тестов.Однако ошибка все еще сохраняется.
Это большая проблема для нашего проекта.Любой совет очень приветствуется.Может быть, кто-нибудь знает способ найти ту часть наших тестов, которая вызывает проблему?
Мы сейчас используем jasmine 3.3.0, karma v3.1.4 и Angular 7.1.3.Мы сделали обновление жасмина и ангуляра неделю назад, потому что надеялись избавиться от проблемы.Изменилось только одно: до обновления тесты выполнялись не случайно, а с фиксированным числом тестов (в нашем случае 639 тестов вызовут тест, 638, 640, 641 ... и т. Д. Пройдут; 648сломался бы снова).Я предполагаю, что это как-то связано со случайным начальным числом, которое сейчас использует жасмин.
Вот полная трассировка стека:
<!-- language: lang-none -->
Uncaught TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/util/subscribeTo.js:41)
at subscribeToResult (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/util/subscribeToResult.js:11)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:74)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:68)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:51)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/Subscriber.js:54)
at Observable._subscribe (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/util/subscribeToArray.js:5)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/Observable.js:43)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/Observable.js:29)
at MergeMapOperator.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapOperator.call (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:29)
at ____________________Elapsed_3_ms__At__Thu_Dec_27_2018_10_03_35_GMT_0100__Mitteleurop_ische_Normalzeit_ ()
at Object.onScheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone-testing.js:108)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:401)
at Object.onScheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:297)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:401)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.scheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:232)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.scheduleMacroTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:255)
at scheduleMacroTaskWithCurrentZone (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:1114)
at :9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:2090