Angular2 单元测试 - 未触发 MdCheckbox 中的更改事件
Angular2 Unit Test - Change event in MdCheckbox is not triggered
我有一个复选框,它有一个(更改)函数,它将变量 'isSelected' 设置为更改函数的 event.checked 值。现在我尝试在 的帮助下对其进行测试,但是,我觉得 (change) 事件没有被触发,因为 'isSelected' 没有改变。我还尝试在(更改)之后触发的函数上使用 spyOn,但这仍然 returns 该函数未被调用(当前测试)。也许有人知道如何检测变化以及我做错了什么。这是我的代码:
import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
@Component({
selector: 'app-intents-checkbox',
templateUrl: 'intents-checkbox.component.html',
styleUrls: ['intents-checkbox.component.scss']
})
export class IntentsCheckboxComponent implements OnChanges {
@Input() intentId;
constructor() { }
public isSelected = false;
intentChecked(event, intentId): void {
this.isSelected = event.checked;
}
}
html:
<md-checkbox [checked]="isSelected"
(change)="intentChecked($event, intentId)"
class="project-checkbox">
</md-checkbox>
到目前为止我的测试:
it('should call intentChecked on change checkbox', () => {
let de = fixture.debugElement.query(By.css('.project-checkbox'));
de.triggerEventHandler('click', {});
fixture.detectChanges();
expect(component.intentChecked).toHaveBeenCalled();
})
(因此测试rn的结果是失败,因为未按预期调用intentChecked)。
谢谢!
我可以给你两个选择:
1) 在 md-checkbox
元素上触发 change
事件
it('should call intentChecked on change checkbox', () => {
let de = fixture.debugElement.query(By.css('.project-checkbox'));
spyOn(component, 'intentChecked');
de.triggerEventHandler('change', {});
expect(component.intentChecked).toHaveBeenCalled();
})
2) 在内部 label
元素上触发 click
事件
it('should call intentChecked on change checkbox', () => {
let de = fixture.debugElement.query(By.css('.project-checkbox label'));
let el = de.nativeElement;
spyOn(component, 'intentChecked');
el.click();
expect(component.intentChecked).toHaveBeenCalled();
})
因为我们要检查是否调用了 intentChecked
方法,所以我们需要在这两种情况下监视此方法。
我有一个复选框,它有一个(更改)函数,它将变量 'isSelected' 设置为更改函数的 event.checked 值。现在我尝试在
import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
@Component({
selector: 'app-intents-checkbox',
templateUrl: 'intents-checkbox.component.html',
styleUrls: ['intents-checkbox.component.scss']
})
export class IntentsCheckboxComponent implements OnChanges {
@Input() intentId;
constructor() { }
public isSelected = false;
intentChecked(event, intentId): void {
this.isSelected = event.checked;
}
}
html:
<md-checkbox [checked]="isSelected"
(change)="intentChecked($event, intentId)"
class="project-checkbox">
</md-checkbox>
到目前为止我的测试:
it('should call intentChecked on change checkbox', () => {
let de = fixture.debugElement.query(By.css('.project-checkbox'));
de.triggerEventHandler('click', {});
fixture.detectChanges();
expect(component.intentChecked).toHaveBeenCalled();
})
(因此测试rn的结果是失败,因为未按预期调用intentChecked)。
谢谢!
我可以给你两个选择:
1) 在 md-checkbox
元素上触发 change
事件
it('should call intentChecked on change checkbox', () => {
let de = fixture.debugElement.query(By.css('.project-checkbox'));
spyOn(component, 'intentChecked');
de.triggerEventHandler('change', {});
expect(component.intentChecked).toHaveBeenCalled();
})
2) 在内部 label
元素上触发 click
事件
it('should call intentChecked on change checkbox', () => {
let de = fixture.debugElement.query(By.css('.project-checkbox label'));
let el = de.nativeElement;
spyOn(component, 'intentChecked');
el.click();
expect(component.intentChecked).toHaveBeenCalled();
})
因为我们要检查是否调用了 intentChecked
方法,所以我们需要在这两种情况下监视此方法。