【问题标题】:how to test an observable in service如何在服务中测试 observable
【发布时间】:2019-03-16 06:56:21
【问题描述】:

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

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
 });

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

我的错误在哪里?

【问题讨论】:

  • 您在哪里以及如何实例化服务?它不会来自空中。

标签: angular angular5 angular-test


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但我得到了同样的错误“未定义不是函数”,可能是因为它是一个字符串吗?
  • 在哪一行? expect(element).toEqual('test') 在这里?你有正确的进口吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多