diff --git a/packages/jsonrpc/src/createClientMock.test.ts b/packages/jsonrpc/src/createClientMock.test.ts new file mode 100644 index 0000000..cafdb1d --- /dev/null +++ b/packages/jsonrpc/src/createClientMock.test.ts @@ -0,0 +1,18 @@ +import createClientMock from './createClientMock' + +describe('createClientMock', () => { + + interface IService { + add(a: number, b: number): number + concat(a: string, b: string): string + } + + it('creates a mock for all methods', async () => { + const [client, mock] = createClientMock(['add', 'concat']) + mock.add.mockReturnValue(Promise.resolve(3)) + mock.concat.mockImplementation((a, b) => Promise.resolve(a + b)) + expect(await client.add(4, 5)).toBe(3) + expect(await client.concat('a', 'b')).toBe('ab') + }) + +}) diff --git a/packages/jsonrpc/src/createClientMock.ts b/packages/jsonrpc/src/createClientMock.ts new file mode 100644 index 0000000..1e3be81 --- /dev/null +++ b/packages/jsonrpc/src/createClientMock.ts @@ -0,0 +1,34 @@ +import { FunctionPropertyNames, TAsyncified } from './types' + +export type TMocked = { + [K in keyof T]: + T[K] extends (...args: infer A) => infer R + ? jest.Mock + : never +} + +/** + * Creates an object with methods mocked using jest. This methods should not + * be exported in this module because it adds a dependency to jest, which is + * a dev dependency. + * + * During tests, users should require this method by writing: + * + * import createClientMock from '@rondo.dev/jsonrpc/lib/createClientMock' + * + * @private + */ +export default function createClientMock( + methods: Array>, +): [TAsyncified, TMocked>] { + const client = methods + .reduce((obj, prop) => { + obj[prop] = jest.fn() + return obj + }, {} as any) + + return [ + client as TAsyncified, + client as TMocked>, + ] +} diff --git a/packages/jsonrpc/tsconfig.esm.json b/packages/jsonrpc/tsconfig.esm.json index 915284d..936541f 100644 --- a/packages/jsonrpc/tsconfig.esm.json +++ b/packages/jsonrpc/tsconfig.esm.json @@ -3,5 +3,8 @@ "compilerOptions": { "outDir": "esm" }, - "references": [] + "references": [ + {"path": "../logger/tsconfig.esm.json"}, + {"path": "../redux/tsconfig.esm.json"} + ] } diff --git a/packages/jsonrpc/tsconfig.json b/packages/jsonrpc/tsconfig.json index 301eb59..28e60f3 100644 --- a/packages/jsonrpc/tsconfig.json +++ b/packages/jsonrpc/tsconfig.json @@ -6,6 +6,7 @@ "rootDir": "src" }, "references": [ - {"path": "../logger"} + {"path": "../logger"}, + {"path": "../redux"} ] }