在测试套件上我想用链接方法模拟模型findOne
then select
登录服务
public loggingIn = async (loginDTO: LoginDTO) => {
const user = await UserModel.findOne({ email : loginDTO.email }).select(['_id', 'username', 'email', 'password']);
if (user) {
const isPasswordMatching = await bcrypt.compare(loginDTO.password, user.password);
if (isPasswordMatching) {
const token = this.generateToken(user);
const tokenDTO : TokenDTO = {
access_token: token,
expiresIn: loginConstant.EXPIRES_IN,
};
return tokenDTO;
}
throw new InvalidCrendentialsException();
}
throw new InvalidCrendentialsException();
}
test
it('should return access_token when login is success', async () => {
UserModel.findOne = jest.fn().mockResolvedValueOnce(UserFactory.successResponse);
bcrypt.compare = jest.fn().mockResolvedValueOnce(true);
const loginController = new LoginController();
const app = new App([loginController]);
const result = await request(app.getServer())
.post(`${loginController.path}`)
.send(loginFactory.validRequest);
// expect(result.status).toBe(200);
expect(result.body).toBe(200);
});
错误信息
user_model_1.default.findOne(...).select 不是函数
为此,您需要定义模拟,以便findOne
方法返回一个对象select
方法。一个简单的方法是将你的模拟定义为:
UserModel.findOne = jest.fn().mockImplementationOnce(() => ({ select: jest.fn().mockResolvedValueOnce(UserFactory.successResponse)}));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)