代码之家  ›  专栏  ›  技术社区  ›  Munerz

在组件上测试rxjs get方法(服务)

  •  0
  • Munerz  · 技术社区  · 6 年前

    服务上的函数调用是这样的。

      get getLayerToEdit(): BehaviorSubject<VectorLayer> {
        return this.layerToEdit;
      }
    

      ngOnInit() {
        this.annoService.getLayerToEdit.subscribe((layerToEdit: any) => {
            this.layer = layerToEdit;
            this.layerId = layerToEdit.ol_uid;
        });
    

    测试文件

      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 回复  |  直到 6 年前
        1
  •  0
  •   Amir Arbabian    6 年前

    你的 吸气剂 因此,您不能使用 因为它只是在嘲笑 方法 您需要创建普通对象,而不是模拟对象,并使用所需的数据将observable分配给 getLayerToEdit 希望有帮助。