Мокко висит после окончания испытаний - PullRequest
0 голосов
/ 26 июня 2018

Я запускаю mocha в nodejs, тестирую асинхронную функцию, я не забыл вызвать done, но после прохождения теста mocha просто зависает, ничего не ожидая. Даже функция, которую я поместил для after(), завершена, но mocha не завершится, пока я не нажму CTRL + C.

Вот код:

describe("tests the user_handler", () => {
  beforeEach(resetDB);
  after(resetDB);

  it("returns null when searching for a user with an id that does not exists", (done) => {
    userHandler.findUserById( {user_id: "U-1234567"} )
      .then((result) => {
        expect(result).to.be.null;
        done()
      })
  })
})

и вот вывод:

tomk@tomk-Latitude-7480 ~/workspace/fundme/server (login_with_github) $ npm test

> fundme-server@1.0.0 test /home/tomk/workspace/fundme/server
> mocha tests/*.spec.js



  tests the user_handler
resetDB called
resetDB finished
    ✓ returns null when searching for a user with an id that does not exists
resetDB called
resetDB finished


  1 passing (64ms)

^CTerminated

Если это актуально (хотя я так не думаю), тестируемая функция использует обещанную версию mysqlConnectionPool из библиотеки mysql2

Вот код для функции resetDB, которую я использую для beforeEach и after:

function resetDB() {
  console.log("resetDB called")
  command =
    "mysql" +
    " --defaults-extra-file=" + mysql_conf_file +
    " --host " + process.env['MYSQL_HOSTNAME'] +
    " -D fundme < " + testing_db_file_location;
  cp.execSync(command);
  console.log("resetDB finished")
}

есть идеи о том, что я мог забыть?

1 Ответ

0 голосов
/ 26 июня 2018

Поскольку вы упоминаете, что используете mysqlConnectionPool. Я предполагаю, что вы, возможно, не закрываете пул, из-за которого ваша программа продолжает ждать завершения всех соединений.

Судя по документам: Использование пулов соединений

// Don't forget to release the connection when finished!

сброс соединения после того, как вы закончите, имеет решающее значение. Проверьте и убедитесь, что вы делаете after() каждый или все ваши тесты:

// For pool initialization, see above
pool.getConnection(function(err, conn) {
   // Do something with the connection
   conn.query(/* ... */);
   // Don't forget to release the connection when finished!
   pool.releaseConnection(conn);
})

Или, поскольку это всего лишь тестовый файл, закрытие всех соединений в after обеспечит остановку mocha в конце:

after(() => { mysqlConnectionPool.end() })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...