Я хочу провести модульное тестирование класса, который getCustomRepository в его конструкторе, но я просто не могу придумать простой способ имитировать его. Вот мой код класса
import {getCustomRepository} from 'typeorm';
export class Controller {
private repository: UserRepository;
constructor() {
this.repository = getCustomRepository(UserRepository); //I want to mock this.
}
async init() {
return this.repository.findUser(1);
}
}
, а вот тесты
describe('User Tests', () => {
it('should return user', async () => {
//Fake user to be resolved.
const user = new User();
user.id = 2;
//I want to mock getCustomRepository(UserRepository); here
//getCustomRepository = jest.fn().mockResolvedValue(UserRepository); HERE HOW???
//Mocking find user
UserRepository.prototype.findUser = jest.fn().mockResolvedValue(user);
const controller = new Controller();
const result = await controller.init();
expect(result).toBeDefined();
});
});
Примечание. Методы имитации репозитория работают хорошо, но я действительно хочу имитировать getCustomRepository, так как это может сократить время, которое тратится впустую. пытается подключиться к базе данных.
Так выглядит getCustomRepository в typeORM
export declare function getCustomRepository<T>(customRepository: ObjectType<T>, connectionName?: string): T;
UserRepository.ts
@EntityRepository(User)
export class UserRepository extends Repository<User> {
public async findUser(id: number) {
return 'real user';
}
}
User.ts
@Entity('users')
export class User{
@PrimaryGeneratedColumn()
id: number;
@Column({type: 'varchar', length: 100})
name: string;
}
Итак, вопрос в том, как мне поиздеваться над этим? Любая помощь будет принята с благодарностью.