【发布时间】:2021-06-05 16:38:51
【问题描述】:
我想知道测试框检查和绑定值更改的正确方法是什么?
这是我的 HTML
<div>
<mat-checkbox class="col-md-9 text-right" id="checkid" name="checkid"
[checked]="this.isChecked"
(change)="this.isChecked = !isChecked">
CheckBoxLabel
</mat-checkbox>
</div>
然后我测试了
const checkboxElem = fixture.debugElement.query(By.css('mat-checkbox')).nativeElement;
expect(checkboxElem.checked).toBeFalsy(); //pass
expect(comp.isChecked).toBeFalsy(); //pass
checkboxElem.click();
fixture.detectChanges();
expect(checkboxElem.checked).toBeTruthy(); //fail
expect(comp.isChecked).toBeTruthy(); //fail
第二个期望总是失败,因为 checkboxElem.checked=false 一直都是。我搜索了大约 5 篇关于这个问题的帖子,并尝试了以下方法,但这些方法都不起作用:
- 将此测试设为异步并添加 whenStable(),结果相同
- 使用查询By id,结果相同
- 将文本放入标签中并由
fixture.debugElement.query(By.css('mat-checkbox label')).nativeElement定义元素,结果相同
在调试模式下,我看不到复选框框,只能看到标签。我不确定茉莉花是如何准确单击该元素的。
【问题讨论】:
标签: angular unit-testing npm checkbox karma-jasmine