angular - 如何对 ngfor 中的按钮进行单元测试
问题描述
我在导航标签中有一个按钮,它是通过循环列表呈现的
<nav *ngFor="let test of getTests(); let last = last">
<button (click)="clickFunction() ></button>
</nav>
单元测试时如何获取按钮的点击事件?
这不起作用:
let button = fixture.debugElement.query(By.css('button'));
button.nativeElement.click();
这给了我一个错误,说它button
是空的。
解决方案
通过在此处放置一条语句,确保它getTests()
正在返回数据并且 a<button>
在您期望的位置在 DOM 中。如果某些条件更改导致返回数据并且要通过更改检测更新 DOM,debugger
您可能需要调用。fixture.detectChanges();
getTests()
我也会使用const buttons = fixture.debugElement.queryAll(By.css('button'));
,然后根据需要进行索引buttons
,以便您可以在多个按钮中区分特定按钮。在按钮上设置标识和动态生成的class
或id
也可用于区分*ngFor
.
我还发现它通常更容易使用buttons[0].triggerEventHandler('click', null)
而不是通过 .nativeElement
我只nativeElement
在debugElement
. 但是,如果您愿意,您可以自由使用nativeElement
。
推荐阅读
- android - Android 上的 Ionic InAppBrowser 无法导航到自定义 URL 方案
- android - LabTest 通过但应用程序直到最后才去
- c++ - 使用 boost 线程时编译失败
- python - 为什么以这两种不同的方式在 Python 中使用 SVM 会给出非常不同的准确度分数?
- javascript - ReactJS / Javascript:单击提交按钮时呈现图形
- python - Opencv上的线性反转图像
- python - 在R或python中获取多个站的Netatmo数据
- html - 通过单击父级输入文本颜色
- java - Exoplayer - 在片段内旋转时保存和恢复状态
- node.js - node basic-auth - 在 URL 中传递基本身份验证凭据不起作用