【发布时间】:2018-08-23 19:55:35
【问题描述】:
我正在使用类似于 How to properly reuse connection to Mongodb across NodeJs application and modules 的东西来保持我的 mongoDB 连接打开。
这需要将所有代码放入 MongoDB.connectDB(async (err) => {...} 块中。
使用 Mocha 编写测试时我将如何使用它。
我必须为每个测试使用单独的连接吗?像这样?
const MongoDB = require('../src/mongoUtil') // providing access to the mongo database
var events = require('../src/events') // containing all my database Functions
describe('events.js', function () {
describe('addEvent()', function () {
it('should return the event, when added succesfully', async function () {
await MongoDB.connectDB(async (err) => {
if (err) throw err
const database = MongoDB.getDB()
const eventsCollection = database.db().collection('events')
const event = {
name: 'test Event',
members: []
}
const result = await events.addEvent(eventsCollection, event)
MongoDB.disconnectDB()
if (result.name !== event.name) {
return new Error('TODO')
}
})
})
})
})
如果我对 mocha 网站的理解正确,我可能还必须手动将测试设置为完成?
我可以只有一个连接吗?
mongoUtil.js
const MongoClient = require('mongodb').MongoClient
const uri = 'mongodb://localhost:27017/testing'
let _db
const connectDB = async (callback) => {
try {
MongoClient.connect(uri, { useNewUrlParser: true }, (err, db) => {
_db = db
return callback(err)
})
} catch (e) {
throw e
}
}
const getDB = () => _db
const disconnectDB = () => _db.close()
module.exports = { connectDB, getDB, disconnectDB }
events.js
const addEvent = async (collection, event) => {
try {
const exists = await collection.findOne({ 'name': event.name })
if (exists) {
return false
} else {
const results = await collection.insertOne(event)
return results.ops[0]
}
} catch (e) {
throw e
}
}
module.exports = { addEvent }
【问题讨论】:
-
我可以只有一个连接吗? - 不能。您可能想在
beforeEach中执行此操作。 -
我想过,但这是不可能的,因为与数据库相关的所有内容都必须在
MongoDB.connectDB({...})块内运行。 -
src/mongoUtil里面是什么? -
我已将其添加到主帖
标签: javascript node.js mongodb mocha.js