如何使用Jest在PassportJS中模拟自定义的回调callback.authenticate(...)方法?

时间:2019-07-10 04:59:14

标签: javascript node.js authentication passport.js

我正在为一个简单的项目创建一个后端,并且已经使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); } }; 回调参数!

0 个答案:

没有答案