我正在学习nodejs,大部分情况下进展顺利。我正试图学习如何在测试中用jest进行嘲笑。我看了很多教程,但我似乎不能让我的头周围。
我有一个中间件,用于受保护的路由…
import jwt from 'jsonwebtoken';
export default function (req, res, next) {
const token = req.header('x_auth-token');
if (!token) return res.status(401).json({ message: 'Access denied' });
try {
const verified = jwt.verify(token, process.env.TOKEN_SECRET);
req.user = verified;
next();
} catch (err) {
return res.status(400).send('Invalid Token');
}
}
从我所读到的,我认为我应该采取的方法是这样的…
import verifyToken from '../middleware/verifyToken';
test('verifyToken', () => {
expect.assertions(1);
const res = {};
const req = {};
const next = (err) => expect(err).toBeFalsy();
verifyToken(req, res, next);
});
然而,这显然行不通。
那么,如何用令牌模拟请求头呢?
2条答案
按热度按时间zpjtge221#
所以如果我们完全忘记真实的世界中的req和res是什么,显然它们是请求和响应,但现在让我们忘记它。
在真实的代码中,有
token = req.header("x_auth-token")
因此,在我们的测试代码中,我们需要在req对象中有一些东西,当使用这些参数调用时,它会返回您想要的内容。
所以我会说。
jest.fn()
创建了一个mock函数,当它被调用时,它总是返回字符串myAuthToken
。然后,我们可以通过添加以下内容来检查是否使用正确的参数调用了头函数
您还需要模拟
jwt.verify
,因为您没有测试jwt.verify
的工作情况,因为它将在自己的测试中进行。你要确保你正确地使用了那个的响应为此,请查看this stack overflow question
最后,我将next设置为一个模拟函数
那么我们可以在测试中说
798qvoo82#
So I was had trouble麻烦understandin how to mock模拟functions函数.我根据Ollie Pugh的回答做了一堆谷歌搜索,这是我得到的。
这通过了测试。但是我不确定测试的有效性。