【发布时间】:2019-07-16 02:16:06
【问题描述】:
我正在尝试在我的 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...
问题是 app.test.js 中的事件处理程序并不总是捕获 'dbConnected' 事件,并且我收到 ELIFECYCLE 错误。
1) “首先”钩子: 错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用“done()”;如果返回一个 Promise,请确保它解析。
测试有时会正确运行,因此我假设这是我处理“dbConnected”事件的方式的问题。我想知道如何正确处理这个问题。
【问题讨论】:
-
你试过增加超时吗? stackoverflow.com/questions/41949895/…
-
现在我注意到我的 before 处理程序在 describe 函数之外。将其嵌入内部解决了问题:)
标签: javascript node.js express mocha.js