【发布时间】:2020-09-06 01:12:33
【问题描述】:
我有一个看起来像这样的 Express 应用程序。
const app = express();
...
...
...
router.post(...);
router.get(...);
router.delete(...);
app.use('/api/v1', router);
MongoClient.connect(mongoUri, { useNewUrlParser: true })
.then(client => {
const db = client.db('db_name');
const collection = db.collection('collection_name');
app.locals.collection = collection;
})
.catch(error => console.error(error));
const server = app.listen(settings.APIServerPort, () => console.log(`Server is listening on port ${settings.APIServerPort}.`));
module.exports = {
server,
knex // using this to connect to the RDBMS
}
该应用程序同时使用 RDBMS 和 Mongo。
我使用 Mocha 为应用程序编写了测试,并将以下代码块添加到 Mocha 测试中。
const app = require('../app');
...test 1...
...test 2...
...test 3...
...
...
...
...test n...
after(async () => {
await app.knex.destroy();
});
after 钩子关闭了我与 RDBMS 的连接。
但是,我不知道如何在测试完成后关闭 MongoDB 连接。
由于保持此连接打开,一旦运行所有测试,测试就永远不会退出并挂起。
我能找到的最接近的答案是这个 - Keep MongoDB connection open while running tests using mocha framework。
但是,我无法为自己工作。
有人可以帮忙吗?
更新 以下答案的组合就是解决问题的方法。
const mongoClient = new MongoClient(mongoUri, { useNewUrlParser: true });
mongoClient.connect()
.then(client => {
const db = client.db('...');
const collection = db.collection('...');
app.locals.collection = collection;
})
.catch(error => console.error(error));
const server = app.listen(settings.APIServerPort, () => console.log(`Server is listening on port ${settings.APIServerPort}.`));
module.exports = {
server,
knex,
mongoClient
}
【问题讨论】:
标签: node.js mongodb express mocha.js