Я столкнулся с проблемой, когда в моей настройке разработки (gitlab-runner с докером, выполняющим karma-runner для тестов) выбранный мной браузер Phantom.js начинает выплевывать ошибки анимации (дополнительная информация здесь: https://github.com/angular/material2/issues/14210). Поскольку у puppeteer примерно ~ 280 МБ, я не хочу заменять им phantomjs на конвейерах бегунов. Есть ли способ включить глобальный модуль перед выполнением каждого файла спецификации? Таким образом, я могу остановить анимацию, импортировав NoopAnimationsModule.
Экспорт из пайплайна gitlab-runner.
PhantomJS 2.1.1 (Linux 0.0.0) LayoutComponent should create FAILED
TypeError: undefined is not an object (evaluating 'getAnimationStyle(element, '').trim') in http://localhost:9876/_karma_webpack_/vendor.js (line 5211)
applyKeyframeAnimation@http://localhost:9876/_karma_webpack_/vendor.js:5211:46
apply@http://localhost:9876/_karma_webpack_/vendor.js:5170:31
init@http://localhost:9876/_karma_webpack_/vendor.js:5334:27
play@http://localhost:9876/_karma_webpack_/vendor.js:5340:18
play@http://localhost:9876/_karma_webpack_/vendor.js:4858:95
http://localhost:9876/_karma_webpack_/vendor.js:4638:24
<Jasmine>
_flushAnimations@http://localhost:9876/_karma_webpack_/vendor.js:4631:28
flush@http://localhost:9876/_karma_webpack_/vendor.js:4280:48
flush@http://localhost:9876/_karma_webpack_/vendor.js:5128:37
http://localhost:9876/_karma_webpack_/vendor.js:135595:35
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11874:31
onInvoke@http://localhost:9876/_karma_webpack_/vendor.js:208197:45
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11873:60
run@http://localhost:9876/_karma_webpack_/polyfills.js:11633:49
runOutsideAngular@http://localhost:9876/_karma_webpack_/vendor.js:78855:31
end@http://localhost:9876/_karma_webpack_/vendor.js:135593:41
end@http://localhost:9876/_karma_webpack_/vendor.js:85716:30
detectChanges@http://localhost:9876/_karma_webpack_/vendor.js:83201:23
_tick@http://localhost:9876/_karma_webpack_/vendor.js:86262:45
http://localhost:9876/_karma_webpack_/vendor.js:86276:54
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11874:31
onInvoke@http://localhost:9876/_karma_webpack_/vendor.js:208197:45
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11873:60
onInvoke@http://localhost:9876/_karma_webpack_/vendor.js:78896:39
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11873:60
run@http://localhost:9876/_karma_webpack_/polyfills.js:11633:49
run@http://localhost:9876/_karma_webpack_/vendor.js:78810:31
detectChanges@http://localhost:9876/_karma_webpack_/vendor.js:86276:28
http://localhost:9876/_karma_webpack_/main.js:6430:30
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11874:31
onInvoke@http://localhost:9876/_karma_webpack_/vendor.js:208197:45
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11873:60
run@http://localhost:9876/_karma_webpack_/polyfills.js:11633:49
runInTestZone@http://localhost:9876/_karma_webpack_/vendor.js:208418:37
http://localhost:9876/_karma_webpack_/vendor.js:208433:33
<Jasmine>
http://localhost:9876/_karma_webpack_/vendor.js:208734:35
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11874:31
onInvoke@http://localhost:9876/_karma_webpack_/vendor.js:208197:45
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11873:60
run@http://localhost:9876/_karma_webpack_/polyfills.js:11633:49
http://localhost:9876/_karma_webpack_/vendor.js:208733:32
http://localhost:9876/_karma_webpack_/vendor.js:208565:45
invokeTask@http://localhost:9876/_karma_webpack_/polyfills.js:11906:36
runTask@http://localhost:9876/_karma_webpack_/polyfills.js:11678:57
invokeTask@http://localhost:9876/_karma_webpack_/polyfills.js:11981:41
invoke@http://localhost:9876/_karma_webpack_/polyfills.js:11970:52
timer@http://localhost:9876/_karma_webpack_/polyfills.js:13764:34
PhantomJS 2.1.1 (Linux 0.0.0): Executed 5 of 10 (1 FAILED) (0 secs / 2.575 secs)
PhantomJS 2.1.1 (Linux 0.0.0): Executed 6 of 10 (1 FAILED) (0 secs / 3.274 secs)
PhantomJS 2.1.1 (Linux 0.0.0): Executed 7 of 10 (1 FAILED) (0 secs / 4.01 secs)
PhantomJS 2.1.1 (Linux 0.0.0): Executed 8 of 10 (1 FAILED) (0 secs / 4.069 secs)
PhantomJS 2.1.1 (Linux 0.0.0): Executed 9 of 10 (1 FAILED) (0 secs / 4.112 secs)
PhantomJS 2.1.1 (Linux 0.0.0): Executed 10 of 10 (1 FAILED) (0 secs / 4.457 secs)
PhantomJS 2.1.1 (Linux 0.0.0): Executed 10 of 10 (1 FAILED) (4.896 secs / 4.457 secs)
TOTAL: 1 FAILED, 9 SUCCESS
Как я могу решить эту проблему, не переключаясь на puppeteer, поскольку это значительно изменит размер изображения бегуна, а время выполнения будет в несколько раз медленнее. Есть ли способ включить глобальный модуль для импорта перед испытательным стендом для определенного файла .spec?
Добавить его на тестовую площадку в каждом компоненте и не забывать добавлять каждый раз? Конечно, но мне интересно, существует ли более простой метод. Я думаю о проектах, которые уже содержат около 100 компонентов, что было бы болезненно.
Да, это основы тестирования: если у вас есть 100 компонентов, которым это нужно, и 10, которым это не нужно, будете ли вы все равно импортировать его в 10 других компонентов? Вы по-прежнему можете создать функцию, которая создает базовый тестовый стенд, но это все, что вы можете сделать, поскольку тестовый стенд создается при каждом тесте (выполняется в beforeEach), чтобы избежать побочных эффектов между изолированными тестами.
Функция решит эту проблему. Возможно, это не лучшее решение, но оно сработает. Вы правы насчет основ тестирования. Спасибо за комментарий ценю!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто добавить его в свой испытательный стенд?