Bileşenleri ComponentFactoryResolver kullanarak dinamik olarak oluşturuyorum ve ayrıca bunları ReflectiveInjector kullanarak dinamik olarak aktarıyorum. Ben çekirdek Enjektör modülünü kullanan bileşen için birim testleri yazmaya çalışıyorum buAngular2 2.0.1 bileşen birim testi, çekirdek Enjektör
import {Component, Injector} from '@angular/core';
@Component({
selector: 'mycomponent'
})
export class MyComponent {
private id: string;
constructor(private injector: Injector) {
this.id = injector.get('injectedInput');
}
}
gibi
Bu
@ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;
let inputProviders = [{
provide: 'injectedInput',
useValue: inputValue
}];
let resolvedInputs = ReflectiveInjector.resolve(inputProviders);
let injector = ReflectiveInjector.fromResolvedProviders(resolvedInputs, this.container.parentInjector);
let factory = componentInfo.factory.resolveComponentFactory(componentInfo.component);
let component = factory.create(injector);
this.container.insert(component.hostView);
gibi yaklaşık görünüyor Sonra dinamik olarak oluşturulan bileşen görünüyor. Aşağıdaki hatayı alıyorum:
Error: No provider for injectedInput!
Benim özellik dosyası şuna benzer:
import { MyComponent } from 'here';
describe('MyComponent',() => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
MyComponent
]
});
});
let component: MyComponent;
beforeEach(inject([RigTransferSpeedPeriodComponent], _component => {
component = _component;
}));
{...my tests...}
});
Ben şeyler bir grup çalıştı ve her yerde arandı ama daha önce yapmış kimseyi bulamadık ettik.
Herhangi bir fikrin var mı?
Çok teşekkürler!
Philippe
yok Tüm bunları neden yaptığınızı görmek için ... ama benim için ebeveyni oluşturan bileşen gibi görünüyor. Bu yüzden bileşenin kendisi de parentInjector kullanıyor ve parentInjector enjekte edilmiş bilgiyi bilmiyor. Belki de niyetinizi açıklamalısınız ve belki de tüm enjeksiyon mantığını yeniden sarmaktan başka bir çözüm yolu vardır. –