【发布时间】:2021-08-30 03:54:24
【问题描述】:
我正在测试一个 Angular 组件,一切都很顺利,直到我遇到了一个我已经尝试解决了好几天的问题。我想要做的就是测试插入行时是否调用了方法“ajouterCompteurALaCampagne”,所以我尝试访问 dx-data-grid DOM 元素,以便发出事件“onRowInserting”,这就是问题发生的地方,我不能将该元素作为 DebugElement 访问,而只能作为 nativeElement 访问。因此,我无法发出 onRowInserting 事件并查看是否调用了该方法。所以我的问题是:“我可以对 nativeElement 进行某种转换,以便可以访问 DebugElement 属性吗?”
HTML 代码
<dx-tab-panel
[height]="'auto'"
[dataSource]="tabs"
[selectedIndex]="0"
[loop]="false"
[animationEnabled]="true">
<div *dxTemplate="let data of 'compteursTemplate'">
<dx-data-grid
#tabCompteurCampagne
id = 'liste-compteur'
[showBorders]="true"
[dataSource]="listeCompteur"
(onRowInserting)="ajouterCompteurALaCampagne($event)"
(onRowRemoving)="supprimerCompteurCampagne($event)"
(onRowUpdated)="modifierCompteurCampagne($event)">
...</dx-data-grid>
...</div>
...<dx-tab-panel>
脚本代码
it("should call the method 'ajouterCompteurALaCampagne' once the event is emitted", async(()=>{
let spy_ajouterCompteurALaCampagne = spyOn(component, "ajouterCompteurALaCampagne");
let dxTabPanelElement = fixture.debugElement.query(
By.directive(DxTabPanelComponent)
);
let dxGridElement = dxTabPanelElement.nativeElement.querySelector('#liste-compteur');
dxGridElement.dispatchEvent(new Event("rowInserting")); //the event is not emmited
expect(spy_ajouterCompteurALaCampagne).toHaveBeenCalledTimes(1);
}));
});
【问题讨论】:
-
dx-data-grid 是自定义组件吗?你是在用真实的在测试中嘲笑它吗?
-
该项目使用一个名为 DevExtreme 的 Angular Javascript UI 组件库,这就是 dx-data-grid 组件的来源。对于测试,我在 TestBed 的导入数组中包含了 devextreme 模块。我使用真正的 dx-data-grid 不是模拟,我只是模拟服务和组件。希望我说清楚了。
标签: angular typescript jasmine karma-jasmine angular-test