Angular中的Rxjs可观察延迟流单元测试

时间:2018-09-28 21:15:55

标签: angular rxjs observable karma-jasmine

我正在尝试编写一个返回Observable的Angular服务的单元测试

// MainService
export class MainService {
  connect(): Observable<IData> {
    return this.depService.subscribe().pipe(
      map(res => JSON.parse(res.body))
    );
  }
}

// depService
export class depService {

  subscribe(): Observable<string> {
    return of(data1, data2, data3).pipe(delay(500));
  }
}

我试图编写这样的单元测试,

  it('Testing Delayed Observable', () => {
    const service = TestBed.get(MainService);
    service.connect().subscribe(res => {
      expect(res).toEqual([data1, data2, data3]);
    });
  });

我知道这是错误的,但是测试总是通过的,因为我什至在期望逻辑之前就关闭了测试。 测试依赖于另一个返回流的服务的服务的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您基本上有两个选择:

  1. 使用茉莉花方式通过done回调测试异步代码:

    it('Testing Delayed Observable', (done) => { const service = TestBed.get(MainService); service.connect().subscribe(res => { expect(res).toEqual([data1, data2, data3]); done(); }); });

  2. 使用角度async函数

    it('Testing Delayed Observable', async(() => { const service = TestBed.get(MainService); service.connect().subscribe(res => { expect(res).toEqual([data1, data2, data3]); }); }));

angular guide for testing中有更多信息。