带有 viewchild 和指令的 Angular 组件测试

Posted

技术标签:

【中文标题】带有 viewchild 和指令的 Angular 组件测试【英文标题】:Angular component test with viewchild and directive 【发布时间】:2018-01-13 19:49:22 【问题描述】:

我对我的问题做了一个笨拙的人...https://embed.plnkr.co/UparfJDomOECGJfWSbqA/ 简而言之:我无法测试我的组件,它似乎在container.component.spec.ts:43 中失败 - 但没有fixture.detectChanges()ngAfterViewInit 将不会启动。我看不出我做错了什么。

我想将组件动态加载到具有指令属性的 ng-template 中,并且该解决方案确实有效,但我无法为其编写工作测试。 因为我对单元测试还很陌生……那是我应该测试的吗 - 我认为是的。 (是的,我阅读了 angular.io 测试指南和其他一些 ;-)) 错误是 TypeError: Cannot read property 'viewContainerRef' of undefined,这似乎表明 @ViewChild 没有 ViewChild...

【问题讨论】:

【参考方案1】:

测试模块看不到MenuDirective,因为您忘记从假模块中导出它:

@NgModule(
    declarations: [
        MenuComponent,
        MenuDirective,
    ],
    exports: [MenuDirective], <== add this
    entryComponents: [MenuComponent]
)
class FakeEntryComponents 

看来你想查询 MenuComponent

menuElement = fixture.debugElement.query(By.directive(MenuComponent))

Plunker Example

另见

Angular 2 Use component from another module

Angular Dynamic Component Injection error

【讨论】:

先生,您是英雄。非常感谢

以上是关于带有 viewchild 和指令的 Angular 组件测试的主要内容,如果未能解决你的问题,请参考以下文章

@viewchild for 指令总是返回元素 ref 而不是指令参考 - angular5

Angular : 你真的懂@ViewChild吗

Angular 在项目中学习@ViewChild和ElementRef的使用

Angular 2 @ViewChild 返回未定义

ViewChild 如何在 Angular 和 Storybook 中工作?

Angular @ViewChild() 错误:预期 2 个参数,但得到 1 个