weaviate / typescript-client

Official Weaviate TypeScript Client
https://www.npmjs.com/package/weaviate-ts-client
BSD 3-Clause "New" or "Revised" License
57 stars 21 forks source link

[FR] Fake WeaviateClient implementation #103

Open fidsusj opened 6 months ago

fidsusj commented 6 months ago

When writing unit tests for a class having a WeaviateClient object as a dependency, one usually tries to mock away the real database connection by using a WeaviateClient mock object instead. Mocking can normally be easily achieved using frameworks like ts-mockito.

import { anyString, instance, mock, when } from 'ts-mockito'

...

const mockClient = mock<WeaviateClient>()
const mockClientInstance = instance(mockClient)

const mockSchema = mock<Schema>()
const mockSchemaInstance = instance(mockSchema)

when(mockClient.schema).thenReturn(mockSchemaInstance)

when(mockSchema.exists(anyString())).thenReturn(Promise.resolve(true))

However, this typescript client makes use of the Builder Pattern heavily, which makes mocking an entire WeaviateClient implementation quite cumbersome.

For developers, it would therefore be convenient to have a fake in-memory WeaviateClient implementation provided by the typescript client library itself.