无法读取未定义的属性(读取 'pipe')

Cannot read properties of undefined (reading 'pipe')

服务

export interface ITransferRequest {
    serviceName:string;
    amount:number
}

@Injectable()
export class TransferService
{
    transferMoneyUrl = 'https://localhost:44321/api/TransferService';

    constructor(private http:HttpClient){}

    doTransfer(transferRequest: ITransferRequest): Observable<TransferResult> {
        return this.http.post<TransferResult>(this.transferMoneyUrl, transferRequest).pipe();
      }
}

测试代码

describe('AppComponent', () => {

  let transferService: TransferService,
  mockHttp: any;

  beforeEach(async () => {

    mockHttp = jasmine.createSpyObj('mockHttp',['get', 'post']);
    transferService = new TransferService(mockHttp);

    await TestBed.configureTestingModule({
      imports: [
        RouterTestingModule
      ],
      declarations: [
        AppComponent
      ],
    }).compileComponents();

  });

  it('should do transfer', done => {
    
    const transferRequest: ITransferRequest = { serviceName: "A", amount: 1000 };

    mockHttp.get.and.returnValue(of(<TransferResult>{ result : 600 }));

    transferService.doTransfer(<ITransferRequest>transferRequest)
      .subscribe((x: TransferResult) => {   
        expect(x.result).toBe(600);
        done();
      });
   
  });

错误

TypeError: Cannot read properties of undefined (reading 'pipe')
    at TransferService.doTransfer (http://localhost:9876/_karma_webpack_/webpack:/src/app/services/transfer.service.ts:32:86)
    at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/webpack:/src/app/app.component.spec.ts:35:21)
    at _ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone.js:372:1)
    at ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone-testing.js:287:1)
    at _ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone.js:371:1)
    at Zone.run (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone.js:134:1)
    at runInTestZone (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone-testing.js:564:1)
    at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone-testing.js:580:1)
    at <Jasmine>

首先,TestBed 配置在您的示例中完全没有用。删掉就行了。

您的错误是因为您为 get 提供了模拟 return 值,但您的测试方法调用了 post。因为间谍方法的默认 return 值是 undefined 它在 .pipe() 上爆炸并出现该错误。