首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟typeorm findAndCount选项的嵌套查询生成器

模拟typeorm findAndCount选项的嵌套查询生成器
EN

Stack Overflow用户
提问于 2022-04-11 12:19:30
回答 1查看 695关注 0票数 1

如您所知,typeorm,特别是findAndCount,有一个where选项,它接受查询生成器,就像您在文档中看到的那样。使用它的查询生成器可以很容易地使用和创建您的自定义查询,但是测试和模拟它,这是我想不出如何做的事情。所以我就是这么用的:

代码语言:javascript
复制
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);

我就是这样嘲笑它的:

代码语言:javascript
复制
    Const fakeQueryBuilder= {
join: jest.fn().mockReturnThis(),
where: (p)=> p.whereFactory(<SelectQueryBuilder<UserEntity>>{
 andWhere: jest.fn().mockReturnThis();
})}
const fakeUserRepo = {
findAndCount : jest.fn(()=>fakeQueryBuilder)
};

你知不知道如何模拟这个问题,或者如何检查我的过滤器是否被应用?

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 15:10:57

代码语言:javascript
复制
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重写了实例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71827740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档