首页 > 解决方案 > 在 Sinon 中,无法成功 stub/mock 方法返回

问题描述

我一直在挣扎。我没有正确的 nodejs 或高级 javascript 功能的学习路径。我仍在朝着这个方向努力。其余端点之一使用此(azure blob 存储)方法(容器客户端)并将结果转换为另一种形式。在使用 sinon 编写测试时,有一点,我必须 stub/mock/fake 这个方法及其返回值。在我的休息端点中,我正在迭代并获取 Blobitem 对象。

listBlobsByHierarchy(string, ContainerListBlobsOptions)

这个方法返回

PagedAsyncIterableIterator<({ kind: "prefix"; } & BlobPrefix) | ({ kind: "blob"; } & BlobItem), ContainerListBlobHierarchySegmentResponse>

我该怎么办?如果我嘲笑这个方法,所以它的回报,那我该怎么办。

这是参考链接 ContainerClient.listBlobsByHierarchy

标签: typescriptazure-blob-storagesinon

解决方案


起初,我使用any类型来绕过这个问题。由于我的代码需要一个可迭代的对象,所以我有这种方式......学习任何类型的好方法

const obj: any = [ {...} ];
containerStub.listBlobsByHierarchy.returns(obj);
const actualResponse = await (await client.get('ENDPOINT')).body;
const expectedobj: any = [ {...} ]; // whatever the method will return
expect(actualResponse).deepEqual(expectedobj);

上面的代码有点显示了这个想法。还有另一种“据称首选”的方式 - 将其转换为未知类型,然后将其转换为真实类型。看起来任何类型的使用都比将其转换为未知类型更糟糕

const obj = [ {...} ] as unknown as PagedAsyncIterableIterator<
                ({ kind: 'prefix' } & BlobPrefix) | ({ kind: 'blob' } & BlobItem),
                ContainerListBlobHierarchySegmentResponse
            >;
containerStub.listBlobsByHierarchy.returns(obj);

作为这种类型脚本/java脚本的新手,来自普通的Java世界,这是具有挑战性的。


推荐阅读