Mocha проверить его () прекратить до разрешения Promise. (Тайм-аут) - PullRequest
0 голосов
/ 20 октября 2019

У меня есть функция:

const createUser = (name, email) => {
    const namePromise = db.findOne({name}).exec();
    const emailPromise = db.findOne({email}).exec();
    return Promise.all([namePromise, emailPromise])
    .then(([foundName, foundEmail]) => {
        if (foundName || foundEmail) {
            return Promise.reject(new Error("Already exists."));
        }
        // In the real implementation, a new row is added to db and returns a Promise.
        return Promise.resolve({uuid: "uuid1"});
    })
}

И у меня есть тест мокко:

describe('Test', function() {
    it('succeed', function() {
        return createUser("user1", "name1")
        .then(function(result) {
            // should print '{uuid: "uuid1"}'
            console.log(result);
            expect(result.uuid).to.equal("uuid1");
        })
        .catch(function(err) {
            expect(err).to.equal(null);
        });
    });
})

npm test результат

 Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/Federer-HYJ/Documents/coding/NodeJS/projects/chatroom_nodejs/backend_v2/test/models_user_test.js)

{ uuid: "uuid1" }

Правильный результат { uuid: "uuid1" } печатается. Но время ожидания наступает до этого.

Теоретически, возвращенное обещание от createUser будет записано в нем (). Тогда тест пройдет. Но кажется, что он () завершается до того, как createUser () был разрешен.

Что здесь не так ???

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