Я хочу проверить этот компонент с помощью Жасмин:Модульного тестирования Сервисного метода подписного к наблюдаемому в угловом
export class EditorComponent implements OnInit {
movimiento: Movimiento;
constructor(private route: ActivatedRoute, private datosService: DatosService) { }
ngOnInit() {
this.route.params
.subscribe(params => {
const _id = params['id'].toString(); // recepción del parámetro
this.datosService
.getMovimientoBy_Id$(_id)
.subscribe(r => this.movimiento = r); // consulta al servicio
});
}
}
Этих методы выписывают на Observable<Movement>
возвращенной службой. Это DatosService
getMovimientoBy_Id$(_id)
метод:
getMovimientoBy_Id$(_id): Observable<Movimiento> {
return this.http
.get(`priv/movimientos/${_id}`)
.map(r => r.json());
}
Я попробовал этот код, чтобы проверить компонент:
describe('EditorComponent',() => {
let movimiento = new Movimiento(new Date(), 0, 1, 1);
let component: EditorComponent;
let fixture: ComponentFixture<EditorComponent>;
let datosService: DatosService;
beforeEach(async(() => {
let activatedRouteMock = {
route: Observable.of({ id: 1 })
}
TestBed.configureTestingModule({
imports: [
HttpModule
],
declarations: [
EditorComponent
],
providers: [
DatosService,
{ provide: ActivatedRoute, useValue: activatedRouteMock }
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EditorComponent);
component = fixture.componentInstance;
datosService = fixture.debugElement.injector.get(DatosService);
});
it('should create',() => {
expect(component).toBeTruthy();
});
it('should create movimiento', (done) => {
let spy = spyOn(datosService, 'getMovimientoBy_Id$').and.returnValue(Observable.of(movimiento));
fixture.detectChanges();
expect(component.movimiento).toBeTruthy();
});
});
Первый тест проходит, но во втором я получаю это исключение
Uncaught Error: Error in :0:0 caused by: Cannot read property 'subscribe' of undefined
Я не понимаю, что я делаю неправильно ... Любые идеи о том, что происходит? Благодарю.
Привет! Я создал проект с последней версией 'angular-cli', и он создает два метода (асинхронный и синхронизирующий). Во всяком случае, с вашим кодом я получаю то же исключение. –
Наконец-то я решил, что проблема заключается в том, что 'ActivatedRoute' не имеет свойства route, поэтому объявляю его следующим образом:' let activatedRouteMock = { params: Observable.of ({id: 1}) } 'отлично работает , вот почему я получал 'undefined'. –
@EliasGarcia, но это то же самое, что и в вашем вопросе –