Как включить глобальный модуль в файлы спецификаций в angular

Я столкнулся с проблемой, когда в моей настройке разработки (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?

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

user4676340 01.02.2019 14:04

Добавить его на тестовую площадку в каждом компоненте и не забывать добавлять каждый раз? Конечно, но мне интересно, существует ли более простой метод. Я думаю о проектах, которые уже содержат около 100 компонентов, что было бы болезненно.

CacheGhost 01.02.2019 14:51

Да, это основы тестирования: если у вас есть 100 компонентов, которым это нужно, и 10, которым это не нужно, будете ли вы все равно импортировать его в 10 других компонентов? Вы по-прежнему можете создать функцию, которая создает базовый тестовый стенд, но это все, что вы можете сделать, поскольку тестовый стенд создается при каждом тесте (выполняется в beforeEach), чтобы избежать побочных эффектов между изолированными тестами.

user4676340 01.02.2019 14:54

Функция решит эту проблему. Возможно, это не лучшее решение, но оно сработает. Вы правы насчет основ тестирования. Спасибо за комментарий ценю!

CacheGhost 01.02.2019 15:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
235
0

Другие вопросы по теме