#jquery #angular #karma-jasmine #angular-cli #angular2-testing
#jquery #angular #карма-жасмин #angular-cli #angular2-тестирование
Вопрос:
Я использую Angular-CLI (версию webpack) для своего проекта Angular 2, и мне также нужно использовать jQuery (к сожалению. В моем случае это зависимость от Semantic-UI, и я использую его для обработки выпадающих меню).
То, как я его использую:
npm install jquery --save
Затем перечислите в нем angular-cli.json
файл в scripts
массиве:
scripts": [
"../node_modules/jquery/dist/jquery.min.js"
]
Таким образом, он включается в файл пакета, и этот файл автоматически используется для корневого файла html:
<script type="text/javascript" src="scripts.bundle.js">
Затем declare var $: any;
в файлах, где мне это нужно, и это работает хорошо.
Однако есть проблема с ng test
тестами, так как Karma выдает ошибку $ is not defined
.
Комментарии:
1. Как вы включили jQuery в спецификацию вашего компонента? Я получаю ту же ошибку и попытался включить jQuery через массив файлов в karma.conf.js .
Ответ №1:
Это связано с тем, что тестируемый html-файл, предоставляемый Karma, не включает scripts.bundle.js
файл, как это делает обычно обслуживаемая версия.
Решение простое; вы просто указываете тот же путь к файлу jquery karma.config.js
в файл в корневой папке проекта. Этот файл доступен в корне проекта.
В files
массив добавьте путь с watched
таким флагом:
files: [
{ pattern: './node_modules/jquery/dist/jquery.min.js', watched: false },
{ pattern: './src/test.ts', watched: false }
]
Теперь Карма должен знать о зависимости jQuery.
Комментарии:
1. О боже, это было в одном шаге от того, что я пытался сделать в течение 2 дней, я просто удалил флаг «включено» из той же строки, и это сработало!
2. когда я использую этот код jQuery(‘#confirmDialogModal’).modal(‘hide’);, я получаю модальную не функциональную ошибку при запуске тестовых примеров, но в реальном приложении это работает. также jQuery(‘#facilityIdModalButton’).click(); не выдает никаких запросов при выполнении тестовых примеров. есть идеи, как исправить или пропустить вызовы jquery