Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest mock函数返回未定义的而不是对象_Javascript_Node.js_Mocking_Jestjs_Jwt - Fatal编程技术网

Javascript Jest mock函数返回未定义的而不是对象

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

我正在尝试在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 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' })
});