加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

无法读取Angular Test Mock的属性’subscribe’

发布时间:2020-12-17 10:24:46 所属栏目:安全 来源:网络整理
导读:我正在尝试对具有注入服务的Angular组件进行单元测试.在组件的构造函数中,调用注入服务的方法,该方法返回Observable.我正在尝试在组件的单??元测试中模拟服务,但我一直遇到这个错误:TypeError:无法读取undefined的属性’subscribe’. 我试图通过以下方式模
我正在尝试对具有注入服务的Angular组件进行单元测试.在组件的构造函数中,调用注入服务的方法,该方法返回Observable.我正在尝试在组件的单??元测试中模拟服务,但我一直遇到这个错误:TypeError:无法读取undefined的属性’subscribe’.

我试图通过以下方式模拟服务:

const serviceStub = {
  getObservable: () => { return {subscribe: () => {}}; },};

beforeEach(async(() => {
  TestBed.configureTestingModule({
    providers: [
      {provide: MyService,useValue: serviceStub}
    ]
})


it('should create',() => {
  spyOn(serviceStub,'getObservable').and.returnValue({subscribe: () => {}});
  expect(component).toBeTruthy();
});

感觉我错过了一些明显的东西.有人可以指出来吗?

UPDATE

即使我在我的测试床提供商中注入实际服务,我也会收到此错误.

组件的构造函数看起来像这样:

private _subscription: Subscription;

constructor(private _service: MyService) {
  this._subscription = _service.getObservable().subscribe(console.log);
}
使用inject注入服务并模拟它而不是存根
it('should create',inject([MyService],(myService: MyService) => {
  spyOn(myService,'getObservable').and.returnValue({subscribe: () => {}});
  expect(component).toBeTruthy();
}));

这是完整版:

零件:

@Component({
  selector: 'my-cmp',template: 'my cmp {{x}}'
})
export class MyComponent {
  x;

  constructor(private myService: MyService) {
    this.myService.getObservable()
      .subscribe(x => {
        console.log(x);
        this.x = x;
      });
  }
}

测试:

describe('my component test',() => {
    let fixture: ComponentFixture<MyComponent>,comp: MyComponent,debugElement: DebugElement,element: HTMLElement;

    beforeEach(async(() => {
      TestBed.configureTestingModule({
        declarations: [MyComponent],providers: [MyService]
      });
    }));

    beforeEach(() => {
      fixture = TestBed.createComponent(MyComponent);
      comp = fixture.componentInstance;
      debugElement = fixture.debugElement;
      element = debugElement.nativeElement;
    });

    it('should create',(myService: MyService) => {
      expect(comp).toBeTruthy();
    }));

    it('should set value',async(inject([MyService],(myService: MyService) => {
      spyOn(myService,'getObservable').and.returnValue(Observable.of(1));

      fixture.detectChanges();

      fixture.whenStable().then(() => {
        expect(comp.x).toEqual(1);
      });
    })));
  });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读