Асин c обратный вызов не был вызван в течение 5000 мс - PullRequest
0 голосов
/ 28 января 2020

Я пишу небольшой тест для проверки того, что какой-то код записывает в мою базу данных mon go. Я получаю следующее сообщение об ошибке от Jest, код действительно работает.

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error: Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

Для моего теста я только вызываю функцию и ожидаю свойство объекта, которое указывает, была ли операция успешной

const {clearDataBase, loadData} = require('../src/utils/dataloader')

beforeEach(clearDataBase)
test('Should write all data into database', () => {   
    jest.setTimeout(30000);
    const result = loadData() 
    expect(result.status).toBe(201)
})

Первоначальная функция анализирует файл JSON и сохраняет некоторые файлы в базу данных:

const loadData = () => {
    try{
        request(url, async (err, res, body) => {
            const data = JSON.parse(body)
            // ... Loads a lot of data, removed for this post only!
        })
        return { error: undefined, status: 201 }
    } catch(e){
        return { error: e, status: undefined }
    }
}

1 Ответ

0 голосов
/ 28 января 2020

Вы должны использовать Promises, чтобы убедиться, что expect() вызывается только после выполнения функции loadData. Jest Asyn c do c

Изменил код ниже, чтобы использовать обещания

const {clearDataBase, loadData} = require('../src/utils/dataloader')

beforeEach(clearDataBase)
test('Should write all data into database', () => {   
    jest.setTimeout(30000);
    loadData().then(result => expect(result.status).toBe(201));
})


const loadData = () => new Promise((resolve, reject) => {
  return request(url, async (err, res, body) => {
    if (err) return reject({error: err})
    const data = JSON.parse(body)
    // ... Loads alot of data, removed for this post only!
    return resolve({ error: undefined, status: 201 })
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...