我有一个侦听dblclick
事件的Angular 4组件。这在浏览器中工作正常:
acticle.component.html
<div (dblclick)="openArticle()">
<!-- stuff -->
</div>
acticle.component.ts
@Component({
selector : 'app-article',
templateUrl: 'article.component.html',
styleUrls : ['article.component.scss'],
})
export class ArticleComponent implements OnInit {
// stuff
openArticle(): void {
// simplified code
this.openArticleInCs();
}
}
现在我正在尝试测试双击是否正确执行openArticle()
内发生的事情,如下所示:
describe('Component: ArticleComponent', () => {
// some variable declarations here
beforeEach(() => {
// some variable definitions here
TestBed.configureTestingModule({
declarations: [/* some declarations here */],
imports: [/* some modules here */],
providers: [/* some providers here */]
});
fixture = TestBed.createComponent(ArticleFactoryComponent);
comp = fixture.componentInstance;
fixture.detectChanges();
de = fixture.debugElement.query(By.directive(ArticleComponent));
el = de.nativeElement;
articleComponent = de.injector.get(ArticleComponent);
});
it('should open an article in CS on double click', () => {
articleComponent.openArticleInCue = jasmine.createSpy('openArticleInCue').and.returnValue(undefined);
articleComponent.openArticleInCs = jasmine.createSpy('openArticleInCs').and.returnValue(undefined);
de.triggerEventHandler("dblclick", new MouseEvent("dblclick"));
fixture.detectChanges();
expect(articleComponent.openArticleInCs).toHaveBeenCalled();
});
});
但测试失败了
expect(articleComponent.openArticleInCs).toHaveBeenCalled();
使用调试器我可以看到triggerEventHandler
有效并且在该函数内部Angular迭代了该组件的已定义事件处理程序。但是,事件处理程序是空的!因此,在我看来,Angular的测试套件并不理解我在那里有一个dblclick
处理程序(如果我没有误解我的推测)。