Не удалось выполнить тест Mocha, убедитесь, что вызывается don () - PullRequest
0 голосов
/ 14 ноября 2018

Привет У меня странная проблема при тестировании кода с Mocha:

Ошибка: превышено время ожидания 2000 мс.Для асинхронных тестов и хуков убедитесь, что вызывается «done ()»;если вы возвращаете обещание, убедитесь, что оно разрешено

Вот код:

describe('POST /notes', () => {
it('should create new note', (done) => {
    const title = 'Test title';
    const text = 'Test text';
    const category = 'Test category';
    request(app)
        .post('/notes')
        .send({title, text, category})
        .expect(200)
        .expect(res => {
            expect(res.body.title).toBe(title);
        })
        .end((err, res) => {
            if (err)
                return done(err);

            Note.find({text: text}).then(notes => {
                 expect(notes.length).toBe(1);
                 expect(notes[0].title).toBe(title);
                done();
            }).catch(err => done(err));
        });
});
it('should not create new note with invalid body data', done => {
    request(app)
        .post('/notes')
        .send({})
        .expect(400)
        .end((err, res) => {
            if (err)
                return done(err);

            Note.find().then(notes => {
                expect(notes.length).toBe(notesDummy.length);
                done();
            }).catch(err => done(err));
        });
})

});

Первый тест не пройден с ошибкой, описанной выше.Что касается второго, оно проходит.Оба теста похожи, и я не знаю, что мне не хватает ... Есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я не уверен на 100%, что expect s вне земли обетованной в начале вызовет done, если они потерпят неудачу:

    .expect(200)
    .expect(res => {
        expect(res.body.title).toBe(title);
    })

Может быть, добавить запись в журнал, чтобы узнать, попадет ли она в ваш обработчик .end?

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

0 голосов
/ 14 ноября 2018

Если вы взаимодействуете с действующей базой данных, возможно, что операция займет больше 2 секунд.Проверка успешной операции займет больше времени, чем отрицательная проверка, если перед взаимодействием с базой данных выполняется проверка на стороне сервера.

Вы можете увеличить время ожидания в mocha, используя this.timeout(<some number in milliseconds>):

it('should create new note', (done) => {
    this.timeout(9000); // set it to something big to see if it fixes your issue
    const title = 'Test title';
    const text = 'Test text';
    const category = 'Test category';
    request(app)
        .post('/notes')
        .send({title, text, category})
        .expect(200)
        .expect(res => {
            expect(res.body.title).toBe(title);
        })
        .end((err, res) => {
            if (err)
                return done(err);

            Note.find({text: text}).then(notes => {
                 expect(notes.length).toBe(1);
                 expect(notes[0].title).toBe(title);
                done();
            }).catch(err => done(err));
        });
});

Единственное, о чем я могу думать, это то, что ваш серверный код где-то висит и не отправляет ответ (или что Notes.find() не разрешает или отклоняет по какой-то причине).Ваш тестовый код выглядит хорошо для меня.

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