未捕获的错误:未捕获(承诺):TypeError:this.xxxService.getSomething(...)。toPromise不是函数

塔季扬娜(Tatyana Molchanova)

在组件中:

private xxxService: XxxService,

const xxxList = await this.xxxService.getSomething(this.someid).toPromise();

在测试文件component.spec.ts中:

import {Observable, of} from 'rxjs';
const xxxServiceStub = {
    getSomething: () => Promise.resolve([])
  };
 beforeEach((async(next) => {
    await TestBed.configureTestingModule({
      declarations: [someComponent],
      imports: [
       ....
      ],
      providers: [
        {provide: XxxService, useValue: xxxServiceStub},
      ]
    }).compileComponents();
    next();
  }));

API:

public getSomething(someid): Observable<xxxRef[]> {
    return this.httpClient
      .get<xxxRef[]>(
        ${environment.url}/api/xxx?someid=${someid},
        {
          observe: 'response'
        }
      ).pipe(
        map(response => {
          return response.body;
        })
      );
  }

界面:

export interface xxxRef {
  name: string;
  id: number;
  description?: string;
}

测试进行了,但是Karma的控制台有一个错误:

zone-evergreen.js:798未捕获错误:未捕获(已承诺):TypeError:this.xxxService.getSomething(...)。toPromise不是函数

纳仁

您需要从getSomething方法返回一个Observable,但要返回的Promise.resolve不是Observable,这就是为什么会出错的原因。

将您的模拟方法更改为此

import { of } from 'rxjs';

...
const xxxServiceStub = {
    getSomething: () => of([]) // this returns observable 
};

toPromise参考

模拟承诺

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档