如何在Angle 2 Karma中模拟双击事件

Sne*_*n27 5 karma-jasmine angular

我有html行元素

<tr class="worktask" (click)="setCurrentTask($event, task)" (dblclick)="openTask($event, task)">some content</tr>
Run Code Online (Sandbox Code Playgroud)

现在,我想测试一下双击表中的行元素时是否调用了openTask。

我试图做到这一点的方法是:

it('should be able to double click on a row to open work stream', async(() => {
        fixture.detectChanges();
        comp.tasks=workflowServiceStub.getTasks(); //get dummy task
        fixture.detectChanges();                   // update view  based on dummy task
        spyOn(comp, 'openTask');                   //spy on openTask function if it is called
        let workTaskRow = fixture.debugElement.nativeElement.querySelectorAll('.worktask'); //getting task row

        workTaskRow[0].dblclick(); 
        fixture.whenStable().then(() => {
           expect(comp.openTask).toHaveBeenCalled();
        })
    }));
Run Code Online (Sandbox Code Playgroud)

但是,当我运行测试时,我收到一条错误消息:

workTaskRow[0].dblclick is not a function
Run Code Online (Sandbox Code Playgroud)

我尝试了.click(),它似乎可以正常工作,不确定是否可以触发双击以测试openTask()函数是否被调用。

小智 6

答案是:Angular 2单元测试:如何测试上下文菜单和双击事件?

const doubleClickEl: DebugElement[] =  fixture.debugElement.queryAll(By.css("li"); 

doubleClickEl[0].triggerEventHandler("dblclick", new MouseEvent("dblclick"));

fixture.detectChanges();
Run Code Online (Sandbox Code Playgroud)