Jestjs 无法模拟createQueryBuilder函数typeorm nestjs jest
我正在尝试为我的服务文件编写单元测试用例。有一个函数linkDevice,它将两个表user和device连接起来并返回对象。我检查设备是否已分配给用户。如果它被分配,我抛出一个badRequestException,如果没有,我将它添加到用户 我尝试向where函数添加一个mockResolvedValue,但它给出了以下错误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 |
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)