gpt4 book ai didi

javascript - 运行测试之前等待数据库连接 - 事件问题

转载 作者:行者123 更新时间:2023-12-03 01:29:44 26 4
gpt4 key购买 nike

我正在尝试在我的 Express 应用程序中测试路线。 App.js是一个子应用程序,当它运行时,它会等待数据库连接,然后根据结果挂载路由。

app.js

db.connect() // returns a promise
.then(dbConnection => {
app.use(routes(dbConnection));
app.emit('dbConnected'); // DB Connected
}).catch(error => {
// if db connection fails - return 503 for every request
console.log(`DB connection failed.`);
app.use((req, res, next) => {
const error = new Error('Service unavailable');
error.statusCode = 503;
error.name = err.name;
next(error)
});
});

module.exports = app;

我编写了 app.test.js 来测试路由。我希望测试等到连接建立(因为只有那时才会挂载路由)。

app.test.js

before(function (done) {
app.on('dbConnected', () => done());
});
// tests go here...

问题是“dbConnected”事件并不总是被 app.test.js 中的事件处理程序捕获,并且我收到 ELIFECYCLE 错误。

1) "before all" hook: Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

测试有时会正确运行,因此我假设这是我处理“dbConnected”事件的方式问题。我想知道如何正确解决这个问题。

最佳答案

这可能是一个竞争条件 - 数据库可能在测试开始之前就已连接。在这种情况下,您永远不会收到该事件,因为它已经触发了。

我会检查数据库是否已连接,只有在未连接时我才会等待“dbConnect”事件。类似的东西

before(function (done) {
if (app.isDbConnected) { // set app.isDbConnected when connected.
process.nextTick(done)
} else {
app.on('dbConnected', () => done());
}
});

关于javascript - 运行测试之前等待数据库连接 - 事件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51361844/

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