Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用自定义事件触发click事件侦听器_Angular - Fatal编程技术网

Angular 使用自定义事件触发click事件侦听器

Angular 使用自定义事件触发click事件侦听器,angular,Angular,我有一个函数,它在动态创建的跨度上被触发 treeFuncItom(_event:Event, catType){ console.log('INSIDE COMPONENT', _event); let myEvent = {}; if(catType == 'id'){ myEvent['value'] = _event['item']['dataItem']['_id']; myEvent['module'] = 'id';

我有一个函数,它在动态创建的跨度上被触发

  treeFuncItom(_event:Event, catType){
    console.log('INSIDE COMPONENT', _event);
    let myEvent = {};
     if(catType == 'id'){
      myEvent['value'] = _event['item']['dataItem']['_id'];
      myEvent['module'] = 'id';
     }else {
      myEvent['module'] = 'tag';
      myEvent['value'] = _event['item']['dataItem']['name'];
     }
    this.ItemChange.emit(myEvent);
  }
我试图通过在angular4中从.spec.ts传递虚拟事件来触发此函数

 it('Should raise ItemChange event, and set module to \'id\'', async () => {
    let _event  = {
      item: {
        dataItem: {
          name: 'abcd'
        },
        index: 0
      },
      originalEvent: 'MouseEvent',
      index: 0
    };

    fixture.detectChanges();

    await fixture.whenStable();
    let ee = JSON.stringify(_event);

    let item = null;
    component.ItemChange.subscribe(it => {
      console.log('Int Test', it);
      item = it;
    });

    component.treeFuncItom(new Event(ee), 'id');
    expect(item).not.toBeNull();
    expect(item.module).toEqual('id');
  });
但我在控制台中遇到错误:

ERROR: 'Unhandled Promise rejection:', 'Cannot read property 'dataItem' of undefined', '; Zone:', 'ProxyZone', '; Task:', 'Promise.then', '; Value:', TypeError{}, 'TypeError: Cannot read property 'dataItem' of undefined
at SidebarComponent.webpackJsonp../src/app/service-catalog/component/sidebar/sidebar.component.ts.SidebarComponent.treeFuncItom (http://localhost:9876/_karma_webpack_/webpack:/src/app/service-catalog/component/sidebar/sidebar.component.ts:26:40)




LOG: 'INSIDE COMPONENT', Event{isTrusted: false}
为什么被信任:false以及如何从spec.ts传递正确的事件
  • 您不需要
    async
    wait
  • 您应该在测试中去掉异步代码:不要测试可观察的,测试它的一个方法是否被调用(单元测试的原则:不要依赖依赖依赖项)
  • 您不需要创建新事件,只需向其传递一个模拟即可
  • 这是一个不涉及模板的函数,您不需要修改夹具
  • 最重要的是:保持简单
  • 在这里,试试这个:

    it('shouldnother',()=>{
    常量mockEvent:any={
    项目:{
    数据项:{
    _id:'item.dataItem.id',
    名称:“item.dataItem.name”
    }
    }
    };
    const itemChange=spyOn(component.itemChange,'emit');
    treeFuncItom(mockEvent,'id');
    期望(项目变更)。已与({
    模块:“id”,
    值:mockEvent.item.dataItem.\u id
    });
    });
    
    非常感谢,先生,这很有帮助