dblclick处理程序未由angular的测试套件注册

时间:2018-02-01 13:13:24

标签: javascript angular unit-testing

我有一个侦听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处理程序(如果我没有误解我的推测)。

0 个答案:

没有答案