Entonces tengo este PromptComponent y el contenido será actualizado por un servicio de datos. Ahora estoy tratando de hacer la prueba unitaria de este componente que tiene esta dependencia de servicio. Aquí está el componente:
export class PromptComponent { @Input() module: any; @select() selectedPrompt; constructor(private moduleService: ModuleService){} }Aquí está el servicio:
getQuote(): Promise<string> { return new Promise(resolve => { setTimeout( () => resolve(this.nextQuote()), 500 ); }); } private nextQuote() { if (this.next === quotes.length) { this.next = 0; } return quotes[ this.next++ ]; }Aquí está el código de prueba de la unidad:
beforeEach(() => { TestBed.configureTestingModule({ declarations: [ PromptComponent, ], providers: [ ModuleService] }); fixture = TestBed.createComponent(PromptComponent); component = fixture.componentInstance; const moduleService = fixture.debugElement.injector.get(ModuleService); spy = spyOn(moduleService, 'getQuote').and.returnValue(Promise.resolve(testService));Me referí a la demostración oficial en la documentación angular https://angular.io/resources/live-examples/testing/ts/eplnkr.html , como dentro de TwainComponent.spec.
Algo realmente extraño es que, como era de esperar, dentro de la demostración oficial, la prueba de TwainComponent pasó sin problemas. Pero yo, por otro lado, obtuve este extraño error de inyección. Si elimino el parámetro dentro del constructor, puedo crear la instancia del accesorio pero obtengo un error de inyección cuando se ejecuta a través de la parte injector.get(). Pero tan pronto como vuelva a poner el private moduleService:ModuleService dentro del constructor del componente, obtendré el dispositivo sin definir y también con el error de inyección.
Eso significa que ni siquiera puedo ejecutar mi código en la parte de inyección de servicio real ( fixture.debugElement.injector.get(ModuleService) ), ya recibí el error.
¿Alguien tiene el mismo problema? Mi código es casi idéntico al código de demostración en Plunker. No tengo ni idea de cómo seguir adelante....