Mocha 测试 express 异步中间件不工作
Mocha test express async middleware done not working
我正在尝试使用 Mocha 的 done 函数测试异步中间件身份验证函数。但是,似乎测试在异步调用中调用 done 函数之前完成。测试不是应该等到 done 回调被调用吗?
中间件:
const AuthMiddleware = (req: Request, res: Response, next: NextFunction) => {
const token = getToken(req)
if (token === undefined) {
res.status(401)
next()
}
jwt.verify(token, getSigningKey, (err, decodedToken) => {
if (err) {
res.status(401)
next()
}
})
}
我的测试:
describe("AuthMiddleware", () => {
it("Should return 401 if token is expired", (done) => {
const options = { headers: { authorization: "Bearer " + expiredToken } }
const req = mockReq(options) as Request
const res = mockRes() as Response
AuthMiddleware(req, res, done)
expect(res.status).to.have.been.calledWith(401)
}).timeout(10000)
})
您正在将 done() 视为 next()。 Done 用于结束测试,而 next 用于中间件
describe("AuthMiddleware", () => {
it("Should return 401 if token is expired",async (done) => {
const options = { headers: { authorization: "Bearer " + expiredToken } }
const req = mockReq(options) as Request
const res = mockRes() as Response
await AuthMiddleware(req, res, done)
expect(res.status).to.have.been.calledWith(401)
}).timeout(10000)
})
我正在尝试使用 Mocha 的 done 函数测试异步中间件身份验证函数。但是,似乎测试在异步调用中调用 done 函数之前完成。测试不是应该等到 done 回调被调用吗?
中间件:
const AuthMiddleware = (req: Request, res: Response, next: NextFunction) => {
const token = getToken(req)
if (token === undefined) {
res.status(401)
next()
}
jwt.verify(token, getSigningKey, (err, decodedToken) => {
if (err) {
res.status(401)
next()
}
})
}
我的测试:
describe("AuthMiddleware", () => {
it("Should return 401 if token is expired", (done) => {
const options = { headers: { authorization: "Bearer " + expiredToken } }
const req = mockReq(options) as Request
const res = mockRes() as Response
AuthMiddleware(req, res, done)
expect(res.status).to.have.been.calledWith(401)
}).timeout(10000)
})
您正在将 done() 视为 next()。 Done 用于结束测试,而 next 用于中间件
describe("AuthMiddleware", () => {
it("Should return 401 if token is expired",async (done) => {
const options = { headers: { authorization: "Bearer " + expiredToken } }
const req = mockReq(options) as Request
const res = mockRes() as Response
await AuthMiddleware(req, res, done)
expect(res.status).to.have.been.calledWith(401)
}).timeout(10000)
})