首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用函数时,应已调用spy toggleStyle

调用函数时,应已调用spy toggleStyle
EN

Stack Overflow用户
提问于 2020-11-23 22:19:39
回答 1查看 29关注 0票数 0

我正在使用jasmine测试。

我有这个函数:

代码语言:javascript
复制
 style: string;
 toggleStyle(style: string, version: string) {
    this.style = `mapbox://styles/mapbox/${style}-${version}`;
  }

和模板:

代码语言:javascript
复制
 <div class="map-menu-item" (click)="toggleStyle('outdoors', 'v11')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faMountain" size="sm" class="pr-2"></fa-icon>Outdoors
        </span>
      </div>

所以我有这个单元测试函数:

代码语言:javascript
复制
 fit('Should mapbox style when user click on icon', () => {
    spyOn(component, 'toggleStyle').and.callThrough();
    fixture.debugElement.query(By.css('.map-menu-item')).nativeElement.click();
    fixture.detectChanges();
    expect(component.toggleStyle).toHaveBeenCalled();
  });

所以我调用这个函数: toggleStyle

但是我仍然得到这个错误:

代码语言:javascript
复制
Expected spy toggleStyle to have been called.

当然,我用谷歌搜索了这个错误。但是我做了一个callThrough,然后调用这个函数。

那么我需要改变什么呢?

谢谢

我在这里也在使用this.style:

代码语言:javascript
复制
async ngOnInit() {
    this.style = `mapbox://styles/mapbox/light-v10`;
    const earthquakes: GeoJSON.FeatureCollection = <any>await import('./amsterdam.geo.json');
    this.earthquakes = {...earthquakes};
  }

下面是它的用法:

代码语言:javascript
复制
<mgl-map [style]="style" [zoom]="[9]" [center]="[4.899, 52.372]">
  <mgl-control position="top-left">
    <div class="d-flex flex-column justify-content-start map-menu">
      <span class="map-menu-header">Sensor</span>
      <div class="map-menu-item" (click)="toggleLayer('amsterdam')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faVideo" size="sm" class="pr-2"></fa-icon>CityHeat
        </span>
      </div>
      <div class="map-menu-item" (click)="toggleLayer('earthquakes')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faWifi" size="sm" class="pr-2"></fa-icon>Wi-Fi
        </span>
      </div>
    </div>
    <div class="d-flex flex-column justify-content-start map-menu">
      <span class="map-menu-header">Layer</span>
      <div class="map-menu-item" (click)="toggleStyle('light', 'v10')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faAdjust" size="sm" flip="horizontal" class="pr-2"></fa-icon>Light
        </span>
      </div>     
      <div class="map-menu-item" (click)="toggleStyle('outdoors', 'v11')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faMountain" size="sm" class="pr-2"></fa-icon>Outdoors
        </span>
      </div>
      <div class="map-menu-item" (click)="toggleStyle('satellite', 'v9')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faSatellite" size="sm" class="pr-2"></fa-icon>Satellite
        </span>
      </div>
    </div>
  </mgl-control>
  
</mgl-map>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 00:11:59

选择器选择它匹配的第一个元素,因此您的选择器匹配此元素:

代码语言:javascript
复制
<div class="map-menu-item" (click)="toggleLayer('amsterdam')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faVideo" size="sm" class="pr-2"></fa-icon>CityHeat
        </span>
      </div>

单击处理程序正在调用toggleLayer

更改您的HTML以使其更具体:

代码语言:javascript
复制
<div class="d-flex flex-column justify-content-start map-menu somethingMoreSpecific">
      <span class="map-menu-header">Layer</span>
      <div class="map-menu-item" (click)="toggleStyle('light', 'v10')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faAdjust" size="sm" flip="horizontal" class="pr-2"></fa-icon>Light
        </span>
      </div>     
      <div class="map-menu-item" (click)="toggleStyle('outdoors', 'v11')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faMountain" size="sm" class="pr-2"></fa-icon>Outdoors
        </span>
      </div>
      <div class="map-menu-item" (click)="toggleStyle('satellite', 'v9')" [state]="[true]" menuItemToggle>
        <span>
          <fa-icon [icon]="faSatellite" size="sm" class="pr-2"></fa-icon>Satellite
        </span>
      </div>
    </div>
代码语言:javascript
复制
fit('Should mapbox style when user click on icon', () => {
    spyOn(component, 'toggleStyle').and.callThrough();
    fixture.debugElement.query(By.css('.somethingMoreSpecific .map-menu-item')).nativeElement.click(); // change the selector to select the correct div
    fixture.detectChanges();
    expect(component.toggleStyle).toHaveBeenCalled();
  });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64970237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档