Вызов функции в сервисе выглядит следующим образом.
get getLayerToEdit(): BehaviorSubject<VectorLayer> {
return this.layerToEdit;
}
Который затем вызывается в ngOnInit следующим образом.
ngOnInit() {
this.annoService.getLayerToEdit.subscribe((layerToEdit: any) => {
this.layer = layerToEdit;
this.layerId = layerToEdit.ol_uid;
});
Естественно, в моем тесте я хочучтобы увидеть, соответствует ли component.layer тому, что возвращает эта служба.
Тестовый файл
let component: EditFeatureComponent;
let fixture: ComponentFixture<EditFeatureComponent>;
let mockAnnoService = jasmine.createSpyObj(['getLayerToEdit', 'getCurrentAction', 'setCurrentAction']);
let layer;
Первый перед каждым блоком кода
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [EditFeatureComponent],
imports: [FormsModule, HttpClientModule],
providers: [
{ provide: AnnotationService, useValue: mockAnnoService}
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() => {
// Fields required for the component
layer = {
layerName: 'testLayer',
ol_uid: 1
}
// Create the testbed
fixture = TestBed.createComponent(EditFeatureComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
А затем фактический тест
it('Should return a layer object and have a ol_uid of 1', ()=>{
mockAnnoService.getLayerToEdit.and.returnValue(of(layer))
fixture.detectChanges();
expect(component.layer).toBe(layer);
})
Тест возвращает 'this.annoService.getLayerToEdit.subscribe is not a function'
Я также пытался использовать подписку, а не.
mockAnnoService.getLayerToEdit.and.returnValue({ subscribe: () => {} })
Я довольно плохо осведомлен о тестировании, ноТакой подход я обычно применяю для тестирования сервисов, но я впервые тестирую метод get из сервиса, поэтому я предполагаю, что я где-то ошибаюсь.