Приложение My 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');
}
..
}
Когда я запускаю это в своем приложении, я не получаю ошибок и получаю значение "привет мир". Однако, когда я пытаюсь запустить пример модульного теста, я получаю следующую ошибку: «Селектор« 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 (), мой тестовый блок проходит, но когда я пытаюсь запустить приложение, я получаю пустой экран.
Что мне нужно сделать в моем коде, чтобы позволить мне получить доступ к атрибуту корневого компонента, который может корректно работать в моем приложении и пройти тестовый блок?