我正在为一个简单的项目创建一个后端,并且已经使PassportJS和本地策略起作用。我想在控制器中添加一些单元测试,但无法弄清楚如何在我的password.authenticate中模拟所有业务逻辑,这是使用自定义回调的。
我已经尝试过使用Jest的mockImplementation创建方法或函数,但它始终会给我一个TypeError,它说passport.authenticate(...)不是函数。
这是控制器中的“ registerUser”操作,该操作使用PassportJS和本地策略上的自定义回调。
// initialise the counter
const counter = {};
// count the data
Object.values(data).forEach(
pref => counter[pref] ? counter[pref]++ : counter[pref] = 1
);
这就是我的测试用例现在的样子,但是我不知道如何模拟authenticate方法。
已编辑以显示更多代码
counter["Food"]
我收到TypeError错误:passport.authenticate(...)不是一个函数,而我希望我可以从控制器的passport.authenticate()中模拟const registerUser = async (req, res, next) => {
const userDetails = req.body;
const userValidation = bodyValidator.register(userDetails);
if (userValidation.statusCode === undefined) {
passport.authenticate('localRegister', (err, user, info) => {
if (err) throw err;
if (info !== undefined) {
res.status(400);
res.send({
status: 'error',
message: info.message,
statusCode: 400,
code: 400
});
} else {
req.logIn(user, async err => {
const userData = {
firstName: userDetails.firstName,
lastName: userDetails.lastName,
email: userDetails.email
};
await User.update(userData);
res.status(200);
res.send({
message: 'Register successful!'
});
});
}
})(req, res, next);
} else {
res.status(userValidation.statusCode);
res.send(userValidation);
}
};
回调参数!