我在为 Angular 指令创建单元测试时遇到问题。问题是在设置 inputEl.value 并调用 input.dispatchEvent(new Event('input')) 然后调用 fixture.detectChanges() 之后,输入值被删除并且将是一个空字符串(所以总而言之我什至没有得到在那里测试指令)。
这是我的代码:
@Component({
template: `
<form [formGroup]="formGroup">
<input formControlName="datepicker">
</form>`
})
class TestComponent implements OnInit {
formGroup!: FormGroup;
constructor(private readonly formBuilder: FormBuilder) { }
ngOnInit() {
this.initForm();
}
initForm() {
this.formGroup = this.formBuilder.group({
datepicker: ['']
})
}
}
...
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
fixture.detectChanges();
})
it('should add 23:59:59 sec to the initial date', async () => {
component.ngOnInit();
fixture.detectChanges();
const debugEl: HTMLElement = fixture.debugElement.nativeElement;
const inputEl: HTMLInputElement | null = debugEl.querySelector('input');
const value = 'test';
if(inputEl) {
inputEl.value = value;
inputEl.dispatchEvent(new Event('input'));
fixture.detectChanges();
expect(inputEl.value).toBe(value);
}
});
结果:错误:预期“”为“测试”。
我在这里做错了什么?