Angular RxJS-单元测试合并映射内部可观察

Angular RxJS-单元测试合并映射内部可观察,angular,rxjs,Angular,Rxjs,我有以下代码: createAsset(asset: Asset): void { this._assetsService.uploadFile() .pipe( mergeMap(_ => this._assetsService.createAsset({ ...asset, extension: 'png' })), take(1) ) .subscribe(_ => {},

我有以下代码:

  createAsset(asset: Asset): void {
    this._assetsService.uploadFile()
    .pipe(
      mergeMap(_ => this._assetsService.createAsset({
        ...asset,
        extension: 'png'
      })),
      take(1)
    )
    .subscribe(_ => {}, _ => console.error(_));
  }
我想确保无论何时调用这个函数,它都使用正确的参数调用
createAsset

我确实用
Karma
Jasmine
写了一篇UT:

it('...', async (async () => {
    const assetsService = TestBed.inject(AssetsService);
    const uploadSpy = spyOn(assetsService, 'uploadFile').and.returnValue(of());
    const createSpy = spyOn(assetsService, 'createAsset').and.returnValue(of());

    const extension = 'png';

    const asset = {
      name: 'name',
      extension: null
    };

    component.createAsset(asset);

    await fixture.whenStable();
    expect(uploadSpy).toHaveBeenCalled();
    expect(createSpy).toHaveBeenCalledWith({...asset, extension}); // Error : This is never called
  }));
从不调用
mergeMap
createSpy
中的内部对象。 我有什么遗漏吗

 const uploadSpy = spyOn(assetsService, 'uploadFile').and.returnValue(of());

问题在于使用
Observable
简单地将其替换为
void
以外的任何内容的模拟解决了该问题。

可能这是因为通过引用而不是值进行等式检查,您是否可以查看
createSpy
是否使用任何参数调用?您的测试似乎在,你能重现这个错误吗?这个测试没有什么问题,它的断言工作正常。如果它是原始版本的简单版本-请分享原始版本。它实际上不是简单版本,我在Jasmine 3.5.0和Karma 4.4.1上。您错过了测试的1:1副本: