我的 Angular 应用程序要求通过以下方式将数据传递给页面上的根组件:
<application-root testVar="hello world"></application-root>
经过大量研究,我决定不使用 ElementRef 来访问该属性,而是使用 Renderer2。我的 AppComponent 的构造函数设置如下:
@Component({
selector: 'application-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
public data: string;
constructor(private renderer: Renderer2)
{
this.data = this.renderer.selectRootElement('application-root', true).getAttribute('testVar');
}
..
}
当我在我的应用程序中运行它时,我没有收到任何错误,并且我得到了值“hello world”。但是,当我尝试运行单元测试用例时,出现以下错误:“选择器“application-root”与任何元素都不匹配”。这是我的测试用例:
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule,
HttpClientTestingModule
],
declarations: [
AppComponent
],
providers: [
{provide: Router, useValue: routerSpy},
Renderer2
]
}).compileComponents();
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
}));
it('should create the app', () => {
expect(fixture).toBeTruthy();
});
现在,如果我将 selectRootElement 调用移出构造函数,并移入 ngOnInit() 函数,我的单元测试用例通过,但是当我尝试运行应用程序时,我得到一个空白屏幕。
我需要在我的代码中做什么才能访问可以在我的应用程序中正确运行并通过单元测试用例的根组件属性?