我正在尝试测试具有@ViewChild
注释的组件。我正在尝试测试的一个函数调用@ViewChild
的元素进行焦点调用。但是,当我尝试注销@ViewChild
变量时,它总是undefined
。我认为componentFixture.detectChanges()
会启动ElementRef
,但似乎没有。
有没有办法让它不是undefined
?
答案 0 :(得分:3)
我不知道您使用哪个版本的Angular2以及如何初始化测试套件,但detectChanges
实例上的ComponentFixture
方法负责设置此类字段。
以下是一个示例测试,显示了这一点:
it('should set testElt', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => {
return tcb.createAsync(MyList).then((componentFixture: ComponentFixture) => {
expect(componentFixture.componentInstance.testElt).toBeUndefined();
componentFixture.detectChanges();
expect(componentFixture.componentInstance.testElt).toBeDefined();
var testElt = componentFixture.componentInstance.testElt;
expect(testElt.nativeElement.textContent).toEqual('Some test');
});
}));
参见相应的plunkr:https://plnkr.co/edit/THMBXX?p=preview。
答案 1 :(得分:2)
您没有显示您的代码但是,您可能已经将其定义为未定义,因为您执行了ViewChild:
@ViewChild(MySubComponent)
而不是
@ViewChild('componentref')
然后在你的模板中:
<my-sub-component #componentref></my-sub-component>
当然您需要使用componentFixture.detectChanges()