如何测试可观察的服务

时间:2018-10-11 08:45:06

标签: angular angular5 angular-test

我正在为我的服务创建单元测试:

private _element$: BehaviorSubject<string>;

element$: Observable<string>;

constructor() {

  this.element$ = new BehaviorSubject<string>('test');
  this.element$ = this._element$.asObservable();
}

测试是

let service;

beforeEach(() => {
  TestBed.configureTestingModule({
    imports: [
    ],
   });

  service = new TestService();
 });

 it('should give next object',
   async() =>{
     expect(service._element$.getValue()).toEqual('test') -> works
     service.element$.subscribe(element =>
          expect(element.toEqual('test')
     ) -> fails
 });

该可观察项失败,因为“未定义不是函数”。如果我进行调试,我可以看到它找不到“服务”。

我的错误在哪里?

2 个答案:

答案 0 :(得分:0)

测试主体应该是async函数的参数,并且有一些错别字:

it('should give next object',
   async(() => {
     expect(service.element$.getValue()).toEqual('test');
     service.element$.subscribe(element =>
          expect(element).toEqual('test')
     );
 }));

答案 1 :(得分:0)

尝试在.subscribe之前添加一个过滤器(来自rxjs)

service.element$
.pipe(filter(el => !!el ))
.subscribe(element =>
    expect(element.toEqual('test');
)