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);
}
}