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)