如何在 ag-grid 中触发一行事件?



我正在尝试测试ag-grid功能,但无法触发事件。

it('should open Component on double click', () => {
component.gridOptions.api.setRowData(ordersStub);
fixture.detectChanges();
const node = component.gridOptions.api.getRowNode(ordersStub[0].id);
const nodeData = node.data;
const element = (fixture.debugElement.nativeElement as HTMLElement).querySelector(`[row-id="${nodeData.id}"]`);
const onRowDoubleClickedSpy = spyOn(component, 'onRowDoubleClicked');
element.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, view: window, cancelable: true }));
expect(onRowDoubleClickedSpy).toHaveBeenCalled();
});

我做错了什么?

您正在调度的事件看起来正常。所以我认为在调度事件和期望调用组件函数之间需要延迟:

it('should open Component on double click', (done) => {
...
element.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, view: window, cancelable: true }));
setTimeout(() => {
expect(onRowDoubleClickedSpy).toHaveBeenCalled();
done();
});
});

您还可以使用异步测试:

it('should open Component on double click', async(async() => {
...
element.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, view: window, cancelable: true }));
await fixture.whenStable();
expect(onRowDoubleClickedSpy).toHaveBeenCalled();
}));

最新更新