Это решение должно работать:
Вам нужно установить 3 новых пакета в ваших зависимостях dev (если у вас их нет):
npm install --save-dev @babel/core @babel/cli @babel/preset-env
Затем вам нужно создатьфайл с именем .babelrc в корневой проект и добавьте следующую строку:
{ "presets": ["@babel/preset-env"] }
Следующим шагом является добавление сценария npm, который будет запускать babel для компиляции js-файлов в ES2015.Откройте файл package.json и добавьте его в раздел сценариев:
"compile_@agm_core": "babel node_modules/@agm/core -d node_modules/@agm/core --presets @babel/preset-env"
Этот сценарий необходимо запустить после установки npm, поэтому добавьте эту строку в раздел сценариев своего пакета.json тоже:
"postinstall": "npm run compile_@agm_core",
Как только вы это сделаете, запустите npm install , и вы увидите что-то вроде:
babel node_modules / @ agm / core-d node_modules / @ agm / core --presets @ babel / preset-env Успешно скомпилировали 35 файлов с помощью Babel.
Вторая часть заключается в тестировании компонента, использующего импорт AGM.На самом деле я не знаю, как вы его используете, но это логика:
my-agm-component.ts:
import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
import { MapsAPILoader } from '@agm/core';
@Component({
selector: 'app-my-agm-component',
templateUrl: './my-agm.component.html'
})
export class MyAgmComponent implements OnInit {
public latitude: number = 39.8282;
public longitude: number = -98.5795;
public zoom: number = 4;
@ViewChild('search')
public searchElementRef: ElementRef;
constructor(private mapsAPILoader: MapsAPILoader, private ngZone: NgZone) {
}
ngOnInit(): void {
this.loadGMAP();
}
private async loadGMAP(): Promise<void> {
await this.mapsAPILoader.load();
this.listenGMAPSearch();
}
private listenGMAPSearch(): void {
const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement, {
types: ['address']
});
autocomplete.addListener('place_changed', () => {
this.ngZone.run(() => {
this.onPlaceChanged(autocomplete.getPlace());
});
});
}
private onPlaceChanged(place: google.maps.places.PlaceResult): void {
if (!place.geometry) {
return;
}
// handle addr from place.geometry here
}
}
my-agm-component.spec.ts:
Я использую mocha, а не jest, но так я тестирую инициализацию моего компонента.Вы должны быть в состоянии запустить ваш spec-файл без неожиданной ошибки экспорта токена.
import { NgZone } from '@angular/core';
import { stubClass, expect, stub } from '../../../../../../test';
import { MyAgmComponent } from './my-agm.component';
describe('MyAgmComponent', () => {
let component: MyAgmComponent, mapsAPILoader: any, ngZone: NgZone;
beforeEach(() => {
// mocking mapsAPILoader
mapsAPILoader = <any>{load: () => Promise.resolve({})};
// spying load method call
stub(mapsAPILoader, 'load').returns(null);
// initializing component
component = new MyAgmComponent(
mapsAPILoader,
ngZone = stubClass(NgZone)
);
});
it('should init the component', () => {
return expect(component).to.not.be.undefined;
});
});
Я знаю, что это длинный пост, но я надеюсь, что он был полезен.Это решение основано на этом потоке github .