Я пытаюсь создать модульные тесты для своего промежуточного программного обеспечения в приложении Express.
Промежуточное программное обеспечение так просто:
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;
И это мой тест, в котором я хочу убедиться, что если токен в порядке, все будет go гладко, а промежуточное ПО - просто звонки next()
:
it('should call next when everything is ok', async () => {
req.headers.auth = 'rgfh4hs6hfh54sg46';
jest.mock('jsonwebtoken/verify', () => {
return jest.fn(() => ({ id: 'rgfh4hs6hfh54sg46' }));
});
await auth(req, res, next);
expect(next).toBeCalled();
});
Но вместо того, чтобы возвращать объект с полем и идентификатором по желанию, макет всегда возвращает неопределенное значение. Я попытался вернуть объект вместо jest.fn (), но он тоже не сработал.
Я знаю, что здесь есть несколько похожих потоков при переполнении стека, но, к сожалению, ни одно из предложенных решений не сработало для меня.
Если требуется больше контекста, здесь - мой полный набор тестов. Заранее спасибо.