如何从ngx-leaflet(Angular 2)中的onMapReady()执行单元测试

时间:2018-11-27 16:07:11

标签: angular unit-testing testing leaflet ngx-leaflet

我在大型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的所有内容?

0 个答案:

没有答案