Почему Jest не выполняет асинхронные операции в этом тесте Node? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть следующие простые настройки теста:

test('what did I do to deserve this', async () => {
  expect.assertions(1)

  const data = await fetchData() // or fetchData2 
  expect(data).toBe('peanut butter')
})

async function fetchData () {
  return "peanut butter"
}

async function fetchData2 () {
  return knex.select('name').from('foos')
}

Когда я использую fetchData шутка заканчивается счастливо.
Но когда я использую fetchData2, он жалуется на это:

Jest не вышел из системы через секунду после завершения тестового прогона.

Это обычно означает, что существуют асинхронные операции, которые не были остановился на ваших тестах. Рассмотрите возможность запуска Jest с --detectOpenHandles для устранения этой проблемы.

Переменная данных имеет результат запроса db, и другие вызывающие абоненты, более высокие в API, разрешают запрос в порядке и продолжают выполнение других операторов.

Я пытался:

  1. флаг --detectOpenHandles, но он мне ничего не показывает.
  2. делает ожидаемый проход для fetchData2 в случае, если проблема, описанная здесь
  3. передача done arg в асинхронную функцию в test. Он существует, но его вызов не устраняет предупреждение.
  4. бросать в него блоки try / catch

Спасибо за любую помощь, чтобы сделать это счастливым.

Версии вещей:

  • Узел v11.1.0
  • "шутка": "^ 23.6.0"
  • "knex": "^ 0.15.2"

1 Ответ

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

Вам нужно позвонить knex.destroy() в конце набора тестов, чтобы разорвать пул соединений.

...