Javascript Jest mock函数返回未定义的而不是对象
我正在尝试在Express应用程序中为我的auth中间件创建单元测试 中间件非常简单,如下所示:Javascript Jest mock函数返回未定义的而不是对象,javascript,node.js,mocking,jestjs,jwt,Javascript,Node.js,Mocking,Jestjs,Jwt,我正在尝试在Express应用程序中为我的auth中间件创建单元测试 中间件非常简单,如下所示: const jwt = require('jsonwebtoken'); const auth = (req, res, next) => { const tokenHeader = req.headers.auth; if (!tokenHeader) { return res.status(401).send({ error: 'No token pr
const jwt = require('jsonwebtoken');
const auth = (req, res, next) => {
const tokenHeader = req.headers.auth;
if (!tokenHeader) {
return res.status(401).send({ error: 'No token provided.' });
}
try {
const decoded = jwt.verify(tokenHeader, process.env.JWT_SECRET);
if (decoded.id !== req.params.userId) {
return res.status(403).json({ error: 'Token belongs to another user.' });
}
return next();
} catch (err) {
return res.status(401).json({ error: 'Invalid token.' });
}
}
module.exports = auth;
这是我的测试,我想确保如果令牌正常,一切都会顺利进行,中间件只调用next()
:
但是,模拟总是返回未定义的,而不是根据需要返回带有和id字段的对象。我尝试返回对象而不是jest.fn(),但它也不起作用
我知道这里有一些类似的关于堆栈溢出的线程,但不幸的是,提出的解决方案中没有一个适合我
如果需要更多的上下文,则是我的完整测试套件。提前感谢。解决此问题的一种方法是模拟
jsonwebtoken
模块,然后对要模拟的方法使用mockReturnValue
。考虑这个例子:
const jwt = require('jsonwebtoken');
jest.mock('jsonwebtoken');
jwt.verify.mockReturnValue({ id: 'rgfh4hs6hfh54sg46' });
it('should correctly mock jwt.verify', () => {
expect(jwt.verify("some","token")).toStrictEqual({ id: 'rgfh4hs6hfh54sg46' })
});
const jwt = require('jsonwebtoken');
jest.mock('jsonwebtoken');
jwt.verify.mockReturnValue({ id: 'rgfh4hs6hfh54sg46' });
it('should correctly mock jwt.verify', () => {
expect(jwt.verify("some","token")).toStrictEqual({ id: 'rgfh4hs6hfh54sg46' })
});