我有以下代码:
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
的内部对象。
有什么我想念的吗?
答案 0 :(得分:0)
const uploadSpy = spyOn(assetsService, 'uploadFile').and.returnValue(of());
问题在于使用Observable<void>
进行模拟时,只需用void
以外的任何内容替换它即可解决问题。