#typescript #azure-blob-storage #sinon
Вопрос:
Я боролся изо всех сил. У меня нет правильного пути обучения nodejs или расширенным функциям javascript. Я все еще работаю над этим. Одна из конечных точек rest использует этот метод (хранилище больших двоичных объектов azure) (containerclient) и преобразует результаты в другую форму. При написании тестирования с использованием sinon есть момент, когда я должен заглушить/подделать/подделать этот метод и его возвращаемые значения. В моей конечной точке rest я выполняю итерацию и получаю объекты Blobitem.
listBlobsByHierarchy(string, ContainerListBlobsOptions)
этот метод возвращает
PagedAsyncIterableIterator<({ kind: "prefix"; } amp; BlobPrefix) | ({ kind: "blob"; } amp; BlobItem), ContainerListBlobHierarchySegmentResponse>
Как бы я поступил с этим?
Если бы я издевался над этим методом, и поэтому его возвращал, то как бы я поступил.
Это ссылка на ContainerClient.listBlobsByHierarchy
Ответ №1:
Сначала я использовал тип 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' } amp; BlobPrefix) | ({ kind: 'blob' } amp; BlobItem),
ContainerListBlobHierarchySegmentResponse
>;
containerStub.listBlobsByHierarchy.returns(obj);
Будучи новичком в такого рода сценариях / java-сценариях, происходящих из обычного мира Java, это непросто.