我正在使用typescript和typeorm,我有一个这样的存储库:
import { EntityRepository, getRepository, createQueryBuilder } from 'typeorm';
@EntityRepository()
export default class Repo {
async getSomething(): Promise<Result> {
const schemaQuery = getRepository(SomeModel)
.createQueryBuilder('sm')
.select(...)
.where(...);
.....我的测试文件如下所示
import * as typeorm from 'typeorm';
import Repo from '../../../../src/repositories/Repo';
describe(
'test',
() => {
let repo: Repo;
beforeEach(() => {
repo = new Repo();
});
test('getSomething works', async () => {
jest.spyOn(typeorm, 'getRepository').mockImplementation(() => ({ // typescript wants me to implement all properties of getRepository which i dont want
createQueryBuilder: jest.fn(),
}));
...
});
},
);我如何从typeorm直接模拟getRepository,它仍然符合typescript类型检查?
发布于 2021-06-21 11:59:17
我刚刚遇到了这个问题,我实际上使用了你的代码作为我的解决方案的基础。请尝试以下操作:
jest.spyOn(typeorm, "getRepository").mockImplementation(() => {
const original = jest.requireActual("typeorm");
// You need all functions used in your Query builder
return {
...original,
createQueryBuilder: jest.fn().mockImplementation(() => ({
subQuery: jest.fn().mockReturnThis() as unknown,
from: jest.fn().mockReturnThis() as unknown,
where: jest.fn().mockReturnThis() as unknown,
select: jest.fn().mockReturnThis() as unknown,
getQuery: jest.fn().mockReturnThis() as unknown,
setParameter: jest.fn().mockReturnThis() as unknown,
getMany: jest
.fn()
.mockResolvedValue(expected) as unknown,
})),
};
});https://stackoverflow.com/questions/67591877
复制相似问题