Angular 角度单元测试中的事件发射器是';我没打电话
考虑到这个成分Angular 角度单元测试中的事件发射器是';我没打电话,angular,unit-testing,jestjs,click,angular-event-emitter,Angular,Unit Testing,Jestjs,Click,Angular Event Emitter,考虑到这个成分 导出类MyComponent{ @ActivateEditMode上的输出()为新的EventEmitter(); 构造函数(){} emitActivateEditMode(标志:布尔值){ 此.onActivateEditMode.emit(标志); } …这个模板 编辑 …然后此测试失败: description('MyComponent',()=>{ …(试验台进口等) 在每个之前(()=>{ fixture=TestBed.createComponent(MyCom
导出类MyComponent{
@ActivateEditMode上的输出()为新的EventEmitter();
构造函数(){}
emitActivateEditMode(标志:布尔值){
此.onActivateEditMode.emit(标志);
}
…这个模板
编辑
…然后此测试失败:
description('MyComponent',()=>{
…(试验台进口等)
在每个之前(()=>{
fixture=TestBed.createComponent(MyComponent);
组件=fixture.componentInstance;
spyOn(组件“emitActivateEditMode”);
fixture.detectChanges();
});
它('单击时应激活编辑模式',()=>{
const onactivateditmodespy=jest.spyOn(
component.onActivateEditMode,
“发射”
);
const startEditProjectBtn=fixture.debugElement.nativeElement.querySelector(
“[数据测试开始编辑项目btn]”
);
startEditProjectBtn.dispatchEvent(新事件('click');//startEditProjectBtn.click()也不会更改结果
fixture.detectChanges();
期望(component.onActivateEditMode.emit).已被调用(true);
//expect(onActivateEditModeSpy)。与(true)一起调用…也不会更改结果
});
});
测试输出为:
Expected: true
Number of calls: 0
该功能在浏览器中工作,但此测试设置中的某些内容是错误的。我假设您同时使用Jasmine和Jest。问题是当您监视该功能时(
spyOn
),您实际上只是监视函数的调用,而实现细节会消失。要使实现细节得体,您可以执行spyOn(组件,'emitActivateEditMode')。和.callThrough();
,但我认为您不需要它
describe('MyComponent', () => {
... (TestBed imports etc)
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
// remove the mock/spyOn to the function emitActivateEditMode
fixture.detectChanges();
});
it('should activate editmode on click', () => {
// spy on emit calls on onActivatedEditMode
const emitSpy = spyOn(component.onActivateEditMode, 'emit');
const startEditProjectBtn = fixture.debugElement.nativeElement.querySelector(
'[data-test-start-edit-project-btn]'
);
startEditProjectBtn.click();
fixture.detectChanges(); // fixture.detectChanges is not needed here, only if you want to see the update in the HTML.
expect(emitSpy).toHaveBeenCalledWith(true);
});
不要监视被测系统的某些部分。如果要检查组件
@Output
的发射,请使用例如。