Итак, я пытаюсь проверить вызовы, которые компонент х делает для внедренной службы, сама служба имеет несколько методов и геттеры/сеттеры rxjs BehaviourSubject.
В настоящее время тестируется один геттер.
let component: EditFeatureComponent;
let fixture: ComponentFixture<EditFeatureComponent>;
let vectorLayerSubject = new BehaviorSubject<any>({});
let mockAnnoService = { getLayerToEdit: vectorLayerSubject.asObservable() };
let mockFeatureService = jasmine.createSpyObj(['getFeatureToEdit', 'setFeatureToEdit']);
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [EditFeatureComponent, CoreMapComponent, MapsComponent],
imports: [FormsModule, HttpClientModule],
providers: [
{ provide: AnnotationService, useValue: mockAnnoService},
{ provide: FeatureStyleService, useValue: mockFeatureService}
],
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;
});
it('Should return a layer object and have a ol_uid of 1', fakeAsync(()=>{
vectorLayerSubject.next(layer);
component.ngOnInit();
expect(component.layer).toBe(layer);
}))
И это прекрасно работает и охватывает покрытие кода, но как мне протестировать другие вызовы геттера для службы и методов, поскольку я не могу назначить службе более одного mockValue.
Обычно я просто создаю spyObj для методов, но я не могу назначить сервису больше, чем useValue, или сохранить все геттеры/методы в одной переменной.
Я также должен отметить, что службы являются частными и доступны только для чтения в компоненте.
Как вы пытаетесь хранить геттеры/сеттеры? Если вы издеваетесь, вы должны иметь возможность воссоздать весь объект, если это необходимо. При этом я не думаю, что вам вообще нужно издеваться, просто следите за реальными методами обслуживания. +1 за "useClass" Амита
Также я не могу следить за методами получения, я пытался следить за ними, и мне не удалось найти метод «x», который на самом деле не является методом. получить getFeatureLayer () { вернуть this.behaviorSubjectFeatureLayer }
Хорошо, я думаю, я понимаю, к чему вы клоните, устанавливая несколько свойств для одного фиктивного объекта. Я попробую.
@Munerz Чтобы отслеживать методы получения/установки, используйте spyOnProperty(obj, 'propName', 'get').





Вы можете добавить несколько свойств к фиктивному объекту или также можете реализовать фиктивный класс со всеми свойствами и зарегистрировать его с помощью
useClass.