Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用Jest进行角度测试-triggerEventHandler问题_Angular_Typescript_Jestjs - Fatal编程技术网

Angular 使用Jest进行角度测试-triggerEventHandler问题

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(

我有一个设置,我正在编写一个角度应用程序,并用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(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 })