gpt4 book ai didi

node.js - mocha 在测试完成后挂起

转载 作者:搜寻专家 更新时间:2023-10-31 22:42:46 29 4
gpt4 key购买 nike

我在 nodejs 中运行 mocha,测试一个异步函数,我没有忘记调用 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

如果它是相关的(虽然我不这么认为),被测试的函数正在使用 mysql2 库中的 mysqlConnectionPool 的 promisified 版本

这是我在 beforeEachafter 中使用的 resetDB 函数的代码:

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")
}

有什么我可能忘记的想法吗?

最佳答案

因为您提到您正在使用 mysqlConnectionPool。我猜您可能没有关闭导致您的程序继续等待所有连接关闭的池。

根据文档判断:Using connection pools

// 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() })

关于node.js - mocha 在测试完成后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046665/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com