我在大型Angular 2应用中使用ngx-leaflet构建了一个非常复杂的地图组件。我正在尝试编写单元测试,但无法弄清楚如何使onMapReady()
在我的测试(component.spec.ts)文件中“运行”。
我用于地图本身的HTML代码非常简单:
<div class="map"
leaflet
[leafletOptions]="mapOptions"
[leafletLayers]="layers"
[leafletFitBounds]="fitBounds"
[leafletLayersControl]="layersControl"
[leafletLayersControlOptions]="layersControlOptions"
(leafletMapReady)="onMapReady($event)">
</div>
相应的TS文件:
onMapReady(map: L.Map) {
this.leafletMap = map;
...
}
onMapReady充满了许多不同的地图代码,一些可观察的内容,等等。要使地图状态在用户导航到应用程序内的其他页面时得以保持,该代码必须位于onMapReady
中。
我的测试文件还是很标准的。这是beforeEach
方法的摘要:
beforeEach(() => {
fixture = TestBed.createComponent(OspMapComponent);
component = fixture.componentInstance;
...
component.ngOnInit();
fixture.detectChanges();
});
据我了解,在component.ngOnInit()
方法中包含beforeEach
会运行组件的ngOnInit
方法中的所有代码。我需要对onMapReady
方法做同样的事情,但是我对如何处理它及其$event
对象感到困惑。
在component.onMapReady();
中包含beforeEach
产生错误“预期1个参数,但得到0。”包含component.onMapReady(map: L.map);
会导致错误“预期1个参数,但得到2个”。这种方法的几种变化对我没有用。我试图将onMapReady中的所有内容放入其自己的方法中,并在onMapReady中调用该方法,然后将该方法置于测试文件的顶部,但这在测试中引起了其他问题。有没有办法正确运行测试文件中onMapReady的所有内容?