У меня есть компонент, который импортирует и использует плагин jquery:
declare let $: any;
declare let jQuery: any;
import { Component, HostListener, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
// other imports
import './vendor/jqchart/js/jquery.jqChart.min.js';
...
@Component({
selector: 'app-chart',
templateUrl: './chart.component.html',
styleUrls: ['./chart.component.css'],
})
export class ChartComponent implements OnInit, OnDestroy {
...
ngOnInit() {
$(element).jqChart(jqChartConfig); // in ngOnInit() or something
}
...
}
Он прекрасно работает, но тесты не пройдены:
An error was thrown in afterAll
ReferenceError: jQuery is not defined
at Object../src/app/sandboxviews/chart/vendor/jqchart/js/jquery.jqChart.min.js (http://localhost:9877/_karma_webpack_/webpack:/src/app/sandboxviews/chart/vendor/jqchart/js/jquery.jqChart.min.js:11829:2)
at __webpack_require__ (http://localhost:9877/_karma_webpack_/webpack:/webpack/bootstrap:78:1)
at Module../src/app/sandboxviews/chart/chart.component.ts (http://localhost:9877/_karma_webpack_/webpack:/src/app/sandboxviews/chart/chart.component.ts:1:1)
at __webpack_require__ (http://localhost:9877/_karma_webpack_/webpack:/webpack/bootstrap:78:1)
at Module../src/app/app-routing.module.ts (http://localhost:9877/_karma_webpack_/main.js:819:94)
at __webpack_require__ (http://localhost:9877/_karma_webpack_/webpack:/webpack/bootstrap:78:1)
at Module../src/app/app.component.spec.ts (http://localhost:9877/_karma_webpack_/webpack:/src/app/app.component.spec.ts:1:1)
at __webpack_require__ (http://localhost:9877/_karma_webpack_/webpack:/webpack/bootstrap:78:1)
at webpackContext (http://localhost:9877/_karma_webpack_/webpack:/src sync \.spec\.ts$:19:1)
at Array.map (<anonymous>)
Компонент импортируется во все тестированиемодули правильно. Хотя я замечаю, что когда я вынимаю его из одного, скажем, основного теста приложения, а затем просто запускаю этот тест, я получаю сбой jQuery до того, как у него появляется возможность заставить необъявленный модуль вызвать его сбой.
Раньше объявления для $ и jquery были под импортом, я надеялся, что перемещение их вверх исправит это, но не повезло.