gpt4 book ai didi

angular - RxJS - 单元测试 mergeMap 内部 Observable

转载 作者:行者123 更新时间:2023-12-05 07:07:57 25 4
gpt4 key购买 nike

我有以下代码:

  createAsset(asset: Asset): void {
this._assetsService.uploadFile()
.pipe(
mergeMap(_ => this._assetsService.createAsset({
...asset,
extension: 'png'
})),
take(1)
)
.subscribe(_ => {}, _ => console.error(_));
}

而且我想确保无论何时调用此函数,它都会使用正确的参数调用 createAsset

我确实使用 KarmaJasmine 编写了一个 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> 的模拟只需用 void 以外的任何内容替换它解决了这个问题。

关于angular - RxJS - 单元测试 mergeMap 内部 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61998890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com