Angular 使用Jest进行角度测试-triggerEventHandler问题
我有一个设置,我正在编写一个角度应用程序,并用JEST测试它 一切似乎都在运转,直到我试图用角度模拟事件的相互作用。以下测试确实有效:Angular 使用Jest进行角度测试-triggerEventHandler问题,angular,typescript,jestjs,Angular,Typescript,Jestjs,我有一个设置,我正在编写一个角度应用程序,并用JEST测试它 一切似乎都在运转,直到我试图用角度模拟事件的相互作用。以下测试确实有效: it('should delegate click to component',()=>{ jest.spyOn(组件“add”); const button=fixture.debugElement.query(By.css('button>fa-icon[icon=“plus”]); button.nativeElement.click(); expect(
it('should delegate click to component',()=>{
jest.spyOn(组件“add”);
const button=fixture.debugElement.query(By.css('button>fa-icon[icon=“plus”]);
button.nativeElement.click();
expect(component.add).tohaveBeenCall();
});
然而,当我尝试使用fixture的triggerEventHandler('click',null)
-方法时,spy从未被调用
it('should delegate click to component',()=>{
jest.spyOn(组件“add”);
const button=fixture.debugElement.query(By.css('button>fa-icon[icon=“plus”]);
triggerEventHandler('click',null);
expect(component.add).tohaveBeenCall();
});
我确实尝试过用fakeAsync
,调用tick()
(和flush()
,但似乎没有任何区别
主要的问题不是这个案子。。。因为我可以在本机元素上触发事件,所以更大的问题是当我必须测试自定义事件绑定时
有人知道为什么使用本机元素的click
-函数可以工作(我已经读到它使用DOM的本机事件bubling),但是使用fixture的triggerEventHandler
却不行吗?更重要的是,我如何解决这个问题
提前谢谢
其他信息
我正在使用以下jest配置(从package.json
)复制):
“开玩笑”:{
“预置”:“开玩笑预置角度”,
“SetupTestFrameworkScript文件”:“/src/setup jest.ts”,
“详细”:正确,
“testURL”:”http://localhost/",
“转变”:{
“^.+\\(ts|html)$”:“/node\u modules/jest preset angular/preprocessor.js”,
“^.+\\.js$”:“巴别塔笑话”
},
“transformIgnorePatterns”:[
“节点模块/(?!(@ngrx | ngx引导程序))”
],
“全球”:{
“开玩笑”:{
“tsconfig文件”:“src/tsconfig.spec.json”,
“使用LRC”:正确
},
“\uuuuuu转换\uuuhtml\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
}
}我不知道您的按钮单击处理程序是如何工作的,但请记住,
按钮.nativeElement.click()
与按钮.triggerEventHandler('click',null)
并不完全相同。前者将有一个带有目标的真实事件对象,后者将有您指定的对象,即null
,因此您至少应该使用:
button.triggerEventHandler('click', { target: button.nativeElement })
但是我不明白为什么要在
nativeElement上使用triggerEventHandler
。单击()
我遇到了类似的问题,您有进展吗?
button.triggerEventHandler('click', { target: button.nativeElement })