В Синоне не удалось успешно заглушить/имитировать возврат метода

#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, это непросто.