【发布时间】:2018-08-29 21:04:54
【问题描述】:
我正在测试中间件功能并得到一个错误:
TypeError: *** 不是函数
我的 test.js
describe('Login', () => {
it('it must check that function create the token', () => {
const req = {
body: { email: 'user@mail.com', password: '12345' }
}
const res = { locals: sinon.spy() }
return authMiddleware.login(req, res) // authMiddleware.test.js:41
.then(res => {
expect(res.locals.token).to.not.be.undefined;
})
.catch(err => console.log(err));
});
});
和中间件.js
module.exports = User => ({
login(req, res, next) {
if (!req.body.email || !req.body.password) return res.sendStatus(401);
return User.findOne({ email: req.body.email })
.then(user => {
if (!user) return res.sendStatus(401);
if (!user.isValidPassword(req.body.password)) return
res.sendStatus(401);
let payload = { id: user.id };
let token = jwt.encode(payload, config.auth.jwtSecret);
res.locals.token = token;
next();
})
.catch(next);
},
});
错误:
TypeError: authMiddleware.login is not a function
at Context.it (test/api/middleware/authMiddleware.test.js:41:35)
我做错了什么?
【问题讨论】:
-
什么是authMiddleware?它是否正确指向用户模块?
-
该模块授权用户并将令牌传送给控制器。控制器为客户端发送令牌。
-
你在测试中如何要求(authMiddleware)?不应该是 authMiddleware(user).login(...) 吗?
-
@SergeiR 你不懂,贴出你的完整代码吧。显然,您似乎没有导出/公开模块或正确要求它,这就是类型错误的原因
-
是的错误是因为我没有发送 User => const authMiddleware = require('..../authMiddleware')(User);
标签: javascript testing mocha.js sinon chai