Мокко тестовый экспресс асинхронного промежуточного программного обеспечения не работает - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь протестировать асинхронную функцию аутентификации промежуточного программного обеспечения, используя функцию done из Mocha.Тем не менее, кажется, что тест завершается до вызова функции 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)
})

1 Ответ

1 голос
/ 29 сентября 2019

Вы рассматриваете 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)

})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...