модульное тестирование async express middleware - PullRequest
0 голосов
/ 27 января 2019

У меня есть следующее асинхронное промежуточное программное обеспечение, которое использует несколько попыток перехвата для проверки ответа на некоторые вызовы http.Я хочу провести модульное тестирование этого промежуточного программного обеспечения, но сталкиваюсь с трудностями, насмехаясь над "следующим" обратным вызовомКогда я обертываю это так:

it('should test for auth', () => {
    logon(req, res, function() {
        expect(res.locals).toBe(true)
    })
})

, кажется, что на самом деле не запускается функция и не запускается expect после.Любые идеи о том, как я могу издеваться над объектами request, response и next, чтобы я мог проверить окончательные значения (res.locals)?Спасибо.

async function logon(req, res, next) {

if (!req.query.isAuth)
    req.locals.auth = false;
    next()
}

try {
    const getData = await http.get(/logon);
    if (getData.status == 200) {
        res.locals.auth = true;
    } else {
        res.locals.auth = false;
        try {
            const secondCall = http.get(/logon2);
            if (secondCall.data.bob) {
                return res.redirect(/home);
            }
        } catch(e) {console.error(3)}
    }
} catch(e) {console.error(e)}
next();
}

1 Ответ

0 голосов
/ 28 января 2019

вы можете сделать req, res и next как пустые объекты (заглушки) с минимальным API, и проверять изменения на них, после того как ваша функция запустится на них.Для заглушек / издевательств / шпионов вы также можете использовать готовые, с sinon.js https://sinonjs.org или jest

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