Jestjs 无法模拟createQueryBuilder函数typeorm nestjs jest

Jestjs 无法模拟createQueryBuilder函数typeorm nestjs jest,jestjs,nestjs,typeorm,ts-jest,Jestjs,Nestjs,Typeorm,Ts Jest,我正在尝试为我的服务文件编写单元测试用例。有一个函数linkDevice,它将两个表user和device连接起来并返回对象。我检查设备是否已分配给用户。如果它被分配,我抛出一个badRequestException,如果没有,我将它添加到用户 我尝试向where函数添加一个mockResolvedValue,但它给出了以下错误 TypeError: Cannot read property 'mockResolvedValue' of undefined 129 |

我正在尝试为我的服务文件编写单元测试用例。有一个函数linkDevice,它将两个表user和device连接起来并返回对象。我检查设备是否已分配给用户。如果它被分配,我抛出一个badRequestException,如果没有,我将它添加到用户

我尝试向where函数添加一个mockResolvedValue,但它给出了以下错误

 TypeError: Cannot read property 'mockResolvedValue' of undefined

      129 |       new BadRequestException(),
      130 |     );
    > 131 |     profileRepository.createQueryBuilder.where.mockResolvedValue();
          |                                                ^
      132 |     const result = await service.linkDevice(device, 2);
      133 |     console.log(result);
      134 |     expect(service.linkDevice).toHaveBeenCalledWith(device, 2);
服务规范

 beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        ProfileService,
        {
          provide: getRepositoryToken(Profile),
          useValue: {
            create: jest.fn(),
            save: jest.fn(),
            findOne: jest.fn(),
            createQueryBuilder: jest.fn(() => ({
              where: jest.fn().mockReturnThis(),
              setParameter: jest.fn().mockReturnThis(),
              leftJoinAndSelect: jest.fn().mockReturnThis(),
              getOne: jest.fn().mockReturnThis(),
            })),
          },
        },
      ],
    }).compile();

    service = module.get<ProfileService>(ProfileService);
    profileRepository = module.get(getRepositoryToken(Profile));
  });

 it('should throw error if device is already linked to profile', async () => {
    profileRepository.createQueryBuilder.mockResolvedValue(
      new BadRequestException(),
    );
    const result = await service.linkDevice(device, 2);
    console.log(result);
    expect(service.linkDevice).toHaveBeenCalledWith(device, 2);
  });
beforeach(异步()=>{
常量模块:TestingModule=等待测试。createTestingModule({
供应商:[
档案服务,
{
提供:getRepositoryToken(配置文件),
使用价值:{
create:jest.fn(),
保存:jest.fn(),
findOne:jest.fn(),
createQueryBuilder:jest.fn(()=>({
其中:jest.fn().mockReturnThis(),
setParameter:jest.fn().mockReturnThis(),
leftJoinAndSelect:jest.fn().mockReturnThis(),
getOne:jest.fn().mockReturnThis(),
})),
},
},
],
}).compile();
service=module.get(ProfileService);
profileRepository=module.get(getRepositoryToken(Profile));
});
它('如果设备已链接到配置文件,则应引发错误',异步()=>{
profileRepository.createQueryBuilder.mockResolvedValue(
新的BadRequestException(),
);
const result=wait service.linkDevice(设备,2);
控制台日志(结果);
期望(service.linkDevice).与(device,2)一起被调用;
});
错误

TypeError:this.profileRepository.createQueryBuilder(…)。其中不是函数
55 | const user=wait this.profileRepository
56 |.createQueryBuilder('profile'))
>57 |.其中('profile.id=:id')
|        ^
58 |.setParameter('id',userId)
59 |.leftjoin和select('profile.device','device'))
60 |.getOne();
在ProfileService.linkDevice(../src/modules/profile/profile.service.ts:57:8)
反对。(配置文件服务规范ts:131:34)

如果要抛出错误,应使用
mockRejectedValue
而不是
mockResolvedValue
。您可能还希望专门使用
mockRejectedValueOnce
,否则您将覆盖以前设置的模拟。否则,您的模拟设置看起来很好。

如果我想模拟实际值结果,我该怎么做?使用
mockResolvedValueOnce
而不是
mockRejectedValueOnce
  TypeError: this.profileRepository.createQueryBuilder(...).where is not a function

      55 |     const user = await this.profileRepository
      56 |       .createQueryBuilder('profile')
    > 57 |       .where('profile.id = :id')
         |        ^
      58 |       .setParameter('id', userId)
      59 |       .leftJoinAndSelect('profile.device', 'device')
      60 |       .getOne();

      at ProfileService.linkDevice (../src/modules/profile/profile.service.ts:57:8)
      at Object.<anonymous> (profile.service.spec.ts:131:34)