Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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 模拟有角材质匹配EckBoxChanged茉莉花_Angular_Typescript_Jasmine - Fatal编程技术网

Angular 模拟有角材质匹配EckBoxChanged茉莉花

Angular 模拟有角材质匹配EckBoxChanged茉莉花,angular,typescript,jasmine,Angular,Typescript,Jasmine,我需要将模拟的复选框事件传递到被测试的方法中 manageCheckboxStates(event: MatCheckboxChange, spreadItem: SpreadItem): void { if (this.checkboxManager.length > 0) { this.checkboxManager.forEach(id => { const index: number = this.checkboxManager.indexOf(id);

我需要将模拟的复选框事件传递到被测试的方法中

manageCheckboxStates(event: MatCheckboxChange, spreadItem: SpreadItem): void {
if (this.checkboxManager.length > 0) {
  this.checkboxManager.forEach(id => {
    const index: number = this.checkboxManager.indexOf(id);
    if (index !== -1) {
      if (event.checked) {
        this.checkboxManager.push(event.source.id);
      } else {
        this.checkboxManager.splice(index, 1);
      }
    }
  });
} else {
  this.checkboxManager.push(event.source.id);
}
}

事件对象源属性实际上是给我带来问题的原因。 从API:

/** Change event object emitted by MatCheckbox. */
export declare class MatCheckboxChange {
/** The source MatCheckbox of the event. */
source: MatCheckbox;
/** The new `checked` value of the checkbox. */
checked: boolean;
}

由于MatCheckbox构造函数参数的原因,我没有找到模拟的方法:

    constructor(elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, _focusMonitor: FocusMonitor, _ngZone: NgZone, tabIndex: string, _clickAction: MatCheckboxClickAction, _animationMode?: string | undefined);
如能采取任何策略,我们将不胜感激。我只需要提供参数,就可以获得测试方法所需的
事件.checked
事件.source.id
属性。
TIA

我想我被MatCheckbox的复杂性迷住了,以至于忽略了简单性。我重构了方法签名,从事件中获取所需的内容,并从模板而不是整个对象中传入这些值。然后,通过传入sourceId和检查值来测试该方法就很简单了

manageCheckboxStates(sourceId: string, checked: boolean): void {
if (this.checkboxManager.length > 0) {
  this.checkboxManager.forEach(id => {
    const index: number = this.checkboxManager.indexOf(id);
    if (index !== -1) {
      if (checked) {
        this.checkboxManager.push(sourceId);
      } else {
        this.checkboxManager.splice(index, 1);
      }
    }
  });
} else {
  this.checkboxManager.push(sourceId);
}
}