Jestjs NestJs:单元测试模拟函数是如何有条件还是有许多返回案例

Jestjs NestJs:单元测试模拟函数是如何有条件还是有许多返回案例,jestjs,nestjs,Jestjs,Nestjs,如果我想在未找到用户的情况下使用此方法,则无法使用,因为已经使用值{u id:'5e81f97e6708f22e5c4697d2',全名:'user'}对findOne进行了模拟,但在这种情况下,我希望findOne返回未定义。 多谢各位 beforeach(异步()=>{ 常量模块:TestingModule=等待测试。createTestingModule({ 进口:[ PassportModule.register({defaultStrategy:'jwt'}), JwtModule.r

如果我想在未找到用户的情况下使用此方法,则无法使用,因为已经使用值{u id:'5e81f97e6708f22e5c4697d2',全名:'user'}对findOne进行了模拟,但在这种情况下,我希望findOne返回未定义。 多谢各位

beforeach(异步()=>{
常量模块:TestingModule=等待测试。createTestingModule({
进口:[
PassportModule.register({defaultStrategy:'jwt'}),
JwtModule.register({
机密:jwtConfig.secret,
标志选项:{
expiresIn:jwtConfig.expiresIn
}
})
],
控制器:[AuthController],
供应商:[
AuthService,
JWT战略,
{
提供:JWT战略,
使用价值:{
验证:jest.fn().mockResolvedValue(mockUser())
}
},
{
提供:getModelToken(“用户”),
使用价值:{
新增:jest.fn().mockResolvedValue(mockUser()),
findOne:jest.fn()
}
}
],
出口:[]
}).compile();
authController=module.get(authController);
authService=module.get(authService);
});
它('Should throw exception user not found',async()=>{
常量请求={
电邮:'user@gmail.com',
密码:“1234abcd”
};
wait expect(authController.sign(request)).rejects.toThrow();
});
它('Should signIn',async()=>{
等待期望(authController.sign(请求)).resolves.toEqual(响应);
});
假设我可以像这样阻止模拟JwtService标志

 it('Should signIn', async () => {
    JwtService.prototype.sign = jest.fn().mockResolvedValue(accessToken);
    await expect(authController.signIn(request)).resolves.toEqual(response);
});

但是如何使用注入的模块getModelToken(“用户”)实现这一点呢?

为什么不从模块中获取用户模型,因为您已经完成了控制器和authService的工作,并使用
spyOn
或为其分配一个新值来提供一个新的jest模拟

beforeach(异步()=>{
常量模块:TestingModule=等待测试。createTestingModule({
进口:[
PassportModule.register({defaultStrategy:'jwt'}),
JwtModule.register({
机密:jwtConfig.secret,
标志选项:{
expiresIn:jwtConfig.expiresIn
}
})
],
控制器:[AuthController],
供应商:[
AuthService,
JWT战略,
{
提供:JWT战略,
使用价值:{
验证:jest.fn().mockResolvedValue(mockUser())
}
},
{
提供:getModelToken(“用户”),
使用价值:{
新增:jest.fn().mockResolvedValue(mockUser()),
findOne:jest.fn()
}
}
],
出口:[]
}).compile();
authController=module.get(authController);
authService=module.get(authService);
usersModel=module.get(getModelToken('Users'))
});
它('Should throw exception user not found',async()=>{
常量请求={
电邮:'user@gmail.com',
密码:“1234abcd”
};
jest.spyOn(usersModel,'findOne').mockRejectedValueOnce(新错误('User not found'));
wait expect(authController.sign(request)).rejects.toThrow();
});

谢谢你的回答,但我很困惑,我没有存储库,如果这意味着使用typeorm,我就使用mongoose模式,如果我不正确,请帮助我如何导入存储库或执行smth,我不知道如何使用Edited,以保持清晰。我假设使用typeorm存储库而不是mongoose模型。非常感谢,我有confus艾德:)有你的帮助很容易!