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副本: