Супертест: api с «ожиданием» был заблокирован

#javascript #node.js #async-await #mocha.js #supertest

Вопрос:

Я использую supertest, чай и мокко для запуска api-тестирования. У меня есть следующий код:

  • app.js
 app.get('/post', async (req, res, next) => {
    await postModel.find();
    console.log("co xuong duoi la duoc");
    res.json({loi: "hi"}).status(200)

    // postModel.find(() => res.json({loi: "hi"}).status(200));
    //;
})
 
  • test.js
 describe('GET /post', () => {

    before(() => {
        db.connect()
            // .then(() => done())
            // .catch((err) => done(err));
    })

    it('OK nha', (done) => {
        request(app).get('/post').then((res) => {
            const body = res.body;
            console.log(body);
            expect(body).to.deep.property('loi');
            done();
        })
        .catch(error => done(error));
    })
})
 

Когда я запускал тест npm, код был заблокирован в строке wait PostModel.find(). Затем терминал показал: «Для асинхронных тестов и подключений убедитесь, что вызывается «done ()»; если возвращается обещание, убедитесь, что оно выполнено».

Но если я прокомментирую эту строку: //ожидание PostModel.find(). Это сработало.

Строка: console.log(тело) была запущена.

Пожалуйста, помогите мне с этой проблемой. Извините за мой английский.

Комментарии:

1. Что есть postModel и что postModel.find() возвращается?

2. Я нашел ошибку. Не удалось подключиться к Mongodb. Я все исправил. Спасибо 😀 postModel -это модель, созданная по схеме Post

3. Конечно, но вы не опубликовали никакого кода этого — вы даже не пометили вопрос [mongodb].

4. Потому что я не думаю, что ошибка связана с mongodb, и у меня есть только 5 тегов.

Ответ №1:

Попробуйте решить свои проблемы со следующими факторами

  1. Если вы используете удаленное или локальное подключение mongodb, пожалуйста, убедитесь, что все они запущены и работают. Если он удаленный, то для установки соединения потребуется некоторое время. Потому что тайм-аут Мокко по умолчанию составляет всего 5 секунд для тестовых случаев. Это приводит к ошибке отклонения необработанного обещания, а затем эта ошибка может быть показана вам.
  2. Создайте простой await setTimeout(dummyPostData, 5000) код службы API и обратите внимание, проходит тестовый случай или нет.

Наконец, пожалуйста, обновите свой вопрос, получили ли вы какую-либо ошибку подключения к БД или какое-либо исключение, связанное с таймаутом. Так что это поможет нам устранить неполадки.

Комментарии:

1. Я нашел ошибку. Не удалось подключиться к Mongodb. Я все исправил. Спасибо 😀