如您所知,typeorm,特别是findAndCount,有一个where选项,它接受查询生成器,就像您在文档中看到的那样。使用它的查询生成器可以很容易地使用和创建您的自定义查询,但是测试和模拟它,这是我想不出如何做的事情。所以我就是这么用的:
const options: FindManyOptions<UserEntity> = {
join: {
alias: 'User',
innerJoinAndSelect: {
userLogin: 'User.userLogin',
payment: 'User.payment',
},
},
where: (queryBuilder: SelectQueryBuilder<UserEntity>) => {
queryBuilder.andWhere(`${queryBuilder.alias}.isManual = 1`);
if (!filters) {
return;
}
if (filters.id) {
queryBuilder.andWhere(`${queryBuilder.alias}.id = :id`, { id: filters.id });
}
if (filters.userId) {
queryBuilder.andWhere(`${queryBuilder.alias}.userId = :userId`, { userId: filters.userId });
}
},
skip: paginationDto.skip,
take: paginationDto.size,
};
options.order = { createdAt: 'DESC' };
const [users, total] = await this._transactionOnlineRepository.findAndCount(options);我就是这样嘲笑它的:
Const fakeQueryBuilder= {
join: jest.fn().mockReturnThis(),
where: (p)=> p.whereFactory(<SelectQueryBuilder<UserEntity>>{
andWhere: jest.fn().mockReturnThis();
})}
const fakeUserRepo = {
findAndCount : jest.fn(()=>fakeQueryBuilder)
};你知不知道如何模拟这个问题,或者如何检查我的过滤器是否被应用?
发布于 2022-06-28 15:10:57
const returnMock = 'test';
const subQueryMock = {
select: jest.fn().mockReturnThis(),
from: jest.fn().mockReturnThis(),
where: jest.fn().mockReturnThis(),
subQuery: jest.fn().mockReturnThis(),
getQuery: jest.fn().mockReturnValue(returnMock)
};
const createQueryBuilderMock = {
select: jest.fn().mockReturnThis(),
addSelect: jest.fn().mockReturnThis(),
innerJoin: jest.fn().mockReturnThis(),
innerJoinAndMapOne: jest.fn().mockReturnThis(),
where: jest.fn().mockReturnThis(),
andWhere: jest.fn(function (cb) {
if (typeof cb === 'function') {
cb(subQueryMock);
}
return this;
}),
setParameters: jest.fn().mockReturnThis(),
cache: jest.fn().mockReturnThis(),
insert: jest.fn().mockReturnThis(),
values: jest.fn().mockReturnThis(),
orIgnore: jest.fn().mockReturnThis(),
offset: jest.fn().mockReturnThis(),
limit: jest.fn().mockReturnThis(),
orderBy: jest.fn().mockReturnThis(),
getMany: jest.fn().mockReturnValue(returnMock),
getManyAndCount: jest.fn().mockReturnValue(returnMock),
execute: jest.fn().mockReturnValue(returnMock)
};我有一个类似的问题,我需要模拟subQuery,我已经这样解决了。注意,mockReturnThis重写了实例
https://stackoverflow.com/questions/71827740
复制相似问题