Функция тестирования выдает UnhandledPromiseRejectionWarning.Вызывающий тест не пройти - PullRequest
0 голосов
/ 24 октября 2018

Я играл с Mocha Testing.Я заметил, что моя функция выбрасывает Warring из "UnhandledPromiseRejectionWarning" в нескольких местах.Это заставляет скрипт не проходить проверку.

Я не смог найти полезного примера в интернете, который научит / покажет хороший способ решения проблемы.Может быть, один из вас может помочь.

Если у вас есть другие комментарии к моему коду, пожалуйста, не стесняйтесь поделиться.Я здесь, чтобы узнать :)

Функция, где возникает проблема.

it('/POST /logout => Logout a user by purging a session', (done) => {
        let loginInfo = {};
        loginInfo.usr = 'testuser';
        loginInfo.psw = 'mochatesting197';
        let agent = chai.request.agent(app);
        let json = {};
        json.logout = true;
        agent.post('/login')
            .send(loginInfo)
            .then((res) => {
                return agent.post('/logout')
                    .send(json)
                    .then((res) => {
                        res.should.have.status(200);
                        res.body.should.be.a('object');
                        res.body['success'].should.have.property('message').eql('YOU HAVE LOGGED OUT');
                        done();
                    }).catch(function (err) {
                        throw err;
                    });
            });
    });

1 Ответ

0 голосов
/ 25 октября 2018

UnhandledPromiseRejectionWarning происходит, когда Promise отклоняется, но с ним не связан обработчик перехвата.Поскольку обработчик может быть присоединен к Promise в любое время (даже после того, как он отклонен), поведение по умолчанию состоит в том, чтобы записать предупреждение на выход по умолчанию (консоль) после нескольких циклов событий.

Inкод, который вы предоставляете, наиболее вероятная причина в том, что ваш блок catch находится не в том месте.Попробуйте переместить обработчик catch в конец цепочки Promise.

Это точно не решит проблему, но это наиболее вероятное место в предоставленном вами коде.Также обратите внимание, что при использовании механизма обратного вызова «готово» от Mocha вы не должны бросать.Вместо этого вы должны вызвать done с ошибкой (также показанной ниже)

it('/POST /logout => Logout a user by purging a session', (done) => {
    let loginInfo = {};
    loginInfo.usr = 'testuser';
    loginInfo.psw = 'mochatesting197';
    let agent = chai.request.agent(app);
    let json = {};
    json.logout = true;
    agent.post('/login')
        .send(loginInfo)
        .then((res) => {
            return agent.post('/logout')
                .send(json)
                .then((res) => {
                    res.should.have.status(200);
                    res.body.should.be.a('object');
                    res.body['success'].should.have.property('message').eql('YOU HAVE LOGGED OUT');
                    done();
                })
        })
        .catch(function (err) {
            done(err);
        });
});
...