我有以下异步中间件,该中间件使用多个try-catches来检查某些http调用的响应。我希望对该中间件进行单元测试,但是在模拟“下一个”回调时遇到了困难。当我像这样包裹它时:
it('should test for auth', () => {
logon(req, res, function() {
expect(res.locals).toBe(true)
})
})
它似乎实际上并没有在运行该函数并在之后运行expect
。关于如何模拟request
,response
和next
对象以便可以测试最终值(res.locals)的任何想法?谢谢。
async function logon(req, res, next) {
if (!req.query.isAuth)
req.locals.auth = false;
next()
}
try {
const getData = await http.get(/logon);
if (getData.status == 200) {
res.locals.auth = true;
} else {
res.locals.auth = false;
try {
const secondCall = http.get(/logon2);
if (secondCall.data.bob) {
return res.redirect(/home);
}
} catch(e) {console.error(3)}
}
} catch(e) {console.error(e)}
next();
}
答案 0 :(得分:0)
您可以使用最少的api将req,res和next作为空对象(存根)进行创建,并在函数运行后检查它们的更改。对于存根/ mo子/间谍,您还可以使用现成的,并带有sinon.js https://sinonjs.org或jest