微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Karma 单元测试:angular typesafe spyon 无法按预期工作

如何解决Karma 单元测试:angular typesafe spyon 无法按预期工作

我有一个生成的(来自 openapi 描述符)cusomerService,它具有以下功能

@Injectable({
  providedIn: 'root'
})
export class CustomerService {

    public getCustomerInfoV2(requestCustomerIdRequest: RequestCustomerIdRequest,observe?: 'body',reportProgress?: boolean): Observable<ResponseCustomerInfoV2>;
    public getCustomerInfoV2(requestCustomerIdRequest: RequestCustomerIdRequest,observe?: 'response',reportProgress?: boolean): Observable<HttpResponse<ResponseCustomerInfoV2>>;
    public getCustomerInfoV2(requestCustomerIdRequest: RequestCustomerIdRequest,observe?: 'events',reportProgress?: boolean): Observable<HttpEvent<ResponseCustomerInfoV2>>;
    public getCustomerInfoV2(requestCustomerIdRequest: RequestCustomerIdRequest,observe: any = 'body',reportProgress: boolean = false ): Observable<any> {
    ...

当我想在我的 spec.ts 文件中模拟结果时,我想使用 spyOn,但是如果我想以类型安全的方式使用它,我会得到一个编译错误

spyOn(component.customerService,'getCustomerInfoV2').and.returnValue(of({
      header: {
        requestId: '21212121',responseId: '212121',responseTimestamp: null,statusMessages: [],success: true,},payload: emptyCustomer,} as ResponseCustomerInfoV2));

错误信息:

error TS2345: Argument of type 'Observable<{ header: { requestId: string; responseId: string; responseTimestamp: any; statusMessages: any[]; success: boolean; }; payload: CustomerInfoV2; }>' is not assignable to parameter of type 'Observable<HttpEvent<ResponseCustomerInfoV2>>'.
  Type '{ header: { requestId: string; responseId: string; responseTimestamp: any; statusMessages: any[]; success: boolean; }; payload: CustomerInfoV2; }' is not assignable to type 'HttpEvent<ResponseCustomerInfoV2>'.
    Property 'type' is missing in type '{ header: { requestId: string; responseId: string; responseTimestamp: any; statusMessages: any[]; success: boolean; }; payload: CustomerInfoV2; }' but required in type 'HttpUserEvent<ResponseCustomerInfoV2>'.

我可以使用以下不安全代码删除错误消息:

spyOn(component.customerService,} as ResponseCustomerInfoV2 as any));

有没有办法以类型安全的方式使用 spyOn?

解决方法

你们的类型不一样。在您的 spyOn 中,您有一个 ResponseCustomerInfoV2 的 Observable,但您使用的安全类型是 ResponseCustomerInfoV2 类型的 HttPEvent 的 Observable。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。