Тестирование метода get (службы) rxjs на компоненте - PullRequest
0 голосов
/ 27 января 2019

Вызов функции в сервисе выглядит следующим образом.

  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 из сервиса, поэтому я предполагаю, что я где-то ошибаюсь.

1 Ответ

0 голосов
/ 27 января 2019

Ваш mockAnnoService.getLayerToEdit равен getter , поэтому вы не можете смоделировать его, используя jasmine.createSpyObj , потому что таким образом он только методов насмехается,Вам нужно создать простой объект вместо макета и назначить наблюдаемое с необходимыми данными для поля getLayerToEdit .Надеюсь, это поможет.

...