Тест с Promise, не входящий затем / catch - PullRequest
1 голос
/ 18 апреля 2020

У меня есть следующий тест

describe('User - Sign up', function() {
 it('should not register a new user because of missing data on form', function (done) {
    const email = "testemail@gmail.com";
    const req = { body: { email: email }};

    const signUp = controller.signUp(req);

    console.log(signUp);
    signUp
        .then(data => {
            console.log('ok');
        })
        .catch(err => {
            console.log('error')
        });

    done();
});

, являющийся функцией регистрации следующим образом:

return new Promise(((resolve, reject) => {
    validator.checkAsync(async () => {
        const user = {
            email: req.body.email,
            password: await pwdHash.hashPassword(req.body.password)
        }

        await store.signUp(user);

        resolve({
            valid: true
        });
    }, () => {
        reject(validator.errors);
    });
}));

Однако тест не возвращает какой-либо консольный журнал, и он проходит. Чего мне не хватает?

ОБНОВЛЕНИЕ:

Мне удалось исправить это с помощью следующего кода:

    it('should not register a new user when missing data on form', async function () {
    const email = "testemail@gmail.com";

    const res = await chai.request('http://localhost:3000')
        .post('/user/signup',)
        .send({ email: email });

    expect(res).to.have.status(401);
});

на основе комментариев и этого комментария: { ссылка }

1 Ответ

0 голосов
/ 18 апреля 2020

Вы звоните done до того, как Promise выполнит.

signUp
        .then(data => done())
        .catch(done);

Если он входит в .catch, done будет вызван с error, не пройдя тест. Если аргумент, переданный done, верен, он не пройдёт тест (по крайней мере, для mocha).

Вы также можете использовать синтаксис async/await и удалить done

 it('should not register a new...', async function() {
    /* ... */
    await controller.signUp(req)
 });

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