mock-typeorm
Version:
Never hit the database again while testing
57 lines (51 loc) • 2.33 kB
TypeScript
import { EntityManager, SelectQueryBuilder, Repository } from 'typeorm';
type AllEntityManagerMethodObj = {
[K in keyof EntityManager as EntityManager[K] extends (...args: any[]) => any ? K : never]: K;
};
type EntityManagerSetMockMethods = keyof Omit<AllEntityManagerMethodObj, "createQueryBuilder" | "getRepository" | "getTreeRepository" | "getMongoRepository" | "withRepository" | "getCustomRepository" | "hasId" | "getId" | "create" | "merge" | "transaction">;
type SelectQueryBuilderMethodObj = {
[K in keyof SelectQueryBuilder<any> as SelectQueryBuilder<any>[K] extends (...args: any[]) => any ? K : never]: SelectQueryBuilder<any>[K];
};
type FilterMethods<T> = {
[K in keyof SelectQueryBuilderMethodObj as SelectQueryBuilderMethodObj[K] extends (...args: any[]) => T ? K : never]: SelectQueryBuilderMethodObj[K];
};
type ExtractMethodNames<T> = keyof T;
type SelfReferenceQueryBuilderMethods = Exclude<ExtractMethodNames<FilterMethods<SelectQueryBuilder<any>>>, "createQueryBuilder">;
type QueryBuilderReturnMethods = ExtractMethodNames<FilterMethods<Promise<any>>>;
type QueryBuilderMethods = ExtractMethodNames<FilterMethods<any>>;
type AllRepositoryMethods = {
[K in keyof Repository<any>]: K;
}[keyof Repository<any>];
type RepositoryMethods = Exclude<AllRepositoryMethods, "createQueryBuilder">;
type MockHelper<T> = {
[RepositoryName: string]: {
[repositoryMethodName: string]: T;
};
};
type MockState = MockHelper<any>;
type MockHistory = MockHelper<number>;
type Methods = EntityManagerSetMockMethods | QueryBuilderReturnMethods | SelfReferenceQueryBuilderMethods | RepositoryMethods | QueryBuilderMethods;
interface Constructor<T> {
new (...args: any[]): T;
}
interface SetMock {
toReturn(mockData: any, method?: Methods): this;
reset(method?: Methods): void;
}
declare class MockTypeORM {
mocks: MockState;
mockHistory: MockHistory;
__internal: any;
constructor();
onMock(repository: string | Constructor<any>): SetMock;
resetAll(): void;
restore(): void;
private mockDataSouceMethods;
private mockCreateQueryRunner;
private mockCreateQueryBuilder;
private mockSelectQueryBuilderMethods;
private mockRepositoryMethods;
private mockEntityManagerMethods;
private getRepositoryName;
}
export { MockTypeORM };