[Versión angular: 2.4.5]
Estoy intentando escribir una prueba de unidad de componente de integración Angular que contiene un servicio que aprovecha la biblioteca Angular HTTP incorporada. Sin embargo, no puedo hacer que se cree una instancia de mi clase de servicio: el servicio no está definido o aparece "Error: no se pueden resolver todos los parámetros para 'RequestOptions' (?)".
Entiendo que, por lo general, se burlaría del backend (lo ha hecho con éxito en otras pruebas unitarias) o usaría Protractor. Otras preguntas SO hacen referencia a Angular 1 o tienen respuestas que simplemente no parecen funcionar. Código de inicio:
@Injectable() export class ProjectService { projectFeature: IProjectFeature; constructor(private http: Http) { } getProjects(): Observable<IProjects> { return this.http.get("/api/Projects") .map((response: Response) => response.json() || {}) .catch(this.handleError); } } // Jasmine spec file: beforeEach(async(() => { TestBed.configureTestingModule({ providers: [ Http, ProjectService, // service that leverages HTTP ConnectionBackend //RequestOptions // removed b/c otherwise can't find parameters error happens ], imports: [ HttpModule ] }); })); it('sample test', async(() => { var projectService = TestBed.get(ProjectService); var comp = new ProjectComponent(projectService); comp.ngOnInit(); // internally, calls projectService.getProjects() expect(comp.projects[0].name).toEqual("Sample Project Name"); }));El módulo HttpModule debe proporcionarse en la configuración del módulo TestBed . Después de eso, Http realiza solicitudes XHR reales, no se necesitan acciones adicionales, una demostración :
beforeEach(() => { TestBed.resetTestEnvironment(); TestBed.initTestEnvironment( BrowserDynamicTestingModule, platformBrowserDynamicTesting() ); TestBed.configureTestingModule({ imports: [ HttpModule ] }); }); it('should do XHR', async(inject([Http], (http) => { http.get('test.json').subscribe(res => { expect(res.json()).toBe(1); }); })));