我正在使用我的图书馆Contexr,需要测试窗口的click和contextmenu事件。我想监视我的一项服务,并检查是否使用spyOn调用了某些方法。我尝试了几种方法使用fakeAsync,tick和fixture.detectChanges,但从未调用过我的方法。我知道我的事件已添加,因为正在调用添加事件侦听器的方法。我的initialize方法如下:
public initialize() {
window.addEventListener('click', (event: MouseEvent) => {
this.close();
});
window.addEventListener('contextmenu', (event: MouseEvent) => {
this.contexr.addCurrentContext('all', null);
this.open(event, {
context: this.contexr.getCurrentContext(),
top: event.clientY,
left: event.clientX
});
});
}
规格文件如下:
describe('ContextMenuService', () => {
let contextMenuService: ContextMenuService;
let fixture: ComponentFixture<ContextDirectiveTestComponent>;
let element: DebugElement;
let contexr: ContexrMockService;
beforeEach(() => {
contexr = new ContexrMockService();
TestBed.configureTestingModule({
declarations: [ ContextDirectiveTestComponent ],
providers: [
ContextMenuService,
{ provide: Overlay, useClass: OverlayMock },
{ provide: ContexrService, useValue: contexr }
]
});
fixture = TestBed.createComponent(ContextDirectiveTestComponent);
contexr = TestBed.get(ContexrService);
element = fixture.debugElement.query(By.css('div'));
contextMenuService = TestBed.get(ContextMenuService);
contextMenuService.initialize();
});
it('should react to window clicks', fakeAsync(() => {
spyOn(contexr, 'addCurrentContext').and.callThrough();
element.triggerEventHandler('click', null);
tick(1000);
fixture.detectChanges();
expect(contexr.addCurrentContext).toHaveBeenCalled();
}));
});
所以,我再次在互联网上问更聪明的人。此测试有什么问题?单击处理程序可以在实际的应用程序中工作,但是我真的想在不考虑发布2.0.0之前使代码覆盖率达到100%。