我尝试通过更改模型来更改复选框选中的属性,但是它不起作用。我无法理解这种行为。
模板:
<input type="checkbox" [(ngModel)]="model"/>
测试代码:
it('should be checked after click on unchecked checkbox', () => {
const checkbox: HTMLInputElement = fixture.nativeElement.querySelector('input');
component.model = true;
fixture.detectChanges();
expect(checkbox.checked).toBeTruthy();
});
完整代码:https://stackblitz.com/edit/angular-testing-checkbox?file=app/app.component.spec.ts
答案 0 :(得分:1)
因为角度变化检测是异步的。您的expect()
语句在更改检测完成之前发生。在测试中使用角度测试async()
函数:
it('should be checked after click on unchecked checkbox', async( () => {
const checkbox: HTMLInputElement = fixture.nativeElement.querySelector('input');
component.model = true;
fixture.detectChanges();
fixture.whenStable().then(()=> {
expect(checkbox.checked).toBeTruthy();
})
}));
答案 1 :(得分:1)
您可以将fixture.whenStable
与done
函数一起使用,以将异步更改检测周期与expect
同步。
it('should be checked after click on unchecked checkbox', (done) => {
const checkbox: HTMLInputElement = fixture.nativeElement.querySelector('input');
component.model = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(checkbox.checked).toBe(true);
done();
});
});