首页 > 解决方案 > Angular spy RxJS 可观察

问题描述

我想测试一项服务并模拟它获得的提供者。问题是我调用了一个我无法监视的提供者的可观察对象:

export class MyDataService {
  destroy$ = new Subject();

  constructor(
    private wsService: WebsocketService
  ) {
    this.wsService
      .connected$
      .pipe(takeUntil(this.destroy$))
      .subscribe(connected => this.onConnected(connected));
   }

   myCoolFunction() {
      // ...
   }

   ngOnDestory() {
      this.destroy.next();
      this.destroy.complete();
   }
}

我的测试:

describe('MyDataService', () => {
  let service: MyDataService;

  beforeEach(() => {
    const websocketServiceSpy = jasmine.createSpyObj('WebsocketService', [], ['connected$']);

    TestBed.configureTestingModule({
      providers: [
        {
          provide:  WebsocketService,
          useValue: websocketServiceSpy,
        }
      ],
    });
    service             = TestBed.inject(MyDataService);
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
});

但它抛出:

无法读取未定义的属性“管道”

如何正确监视 this.wsService.connected$?

标签: angulartypescriptrxjsjasmine

解决方案


推荐阅读