我有多个单元测试文件。我想避免连接它们。我需要关闭mongoose连接才能gulp-jasmine
到exit。我还想避免将连接处理放入it
块,因为它不属于那里。
如果我将连接/断开连接功能移动到beforeAll
和afterAll
,例如
describe "a unit test"
beforeAll (done)->
db = testSettings.connectDB (err)->
throw err if err?
done()
...
afterAll (done)->
testSettings.disconnectDB (err)->
throw err if err?
done()
然后Jasmine在beforeAll
可以正确断开数据库之前执行下一个描述afterAll
。
(Jasmine Docs)[http://jasmine.github.io/2.1/introduction.html#section-Setup_and_Teardown]
但是,请小心使用beforeAll和afterAll!既然他们不是 在规格之间重置,很容易在两者之间意外泄漏 你的规格,以便他们错误地通过或失败。
connections = 0
exports.connectDB = (callback) ->
configDB = require(applicationDir + 'backend/config/database.js')(environment)
if connections == 0
mongoose.connect configDB.url,{auth:{authdb:configDB.authdb}}, (err)->
if (err)
console.log(err)
return callback err
db = mongoose.connection
db.on 'error', console.error.bind(console, 'connection error:')
db.once 'open', () ->
connections++
return callback null, db
#console.log "Database established"
#Delete all data and seed new data
else
db = mongoose.connection
return callback null, db
exports.disconnectDB = (callback) ->
mongoose.disconnect (err)->
return callback err if err?
connections--
return callback()
收听断开连接事件也不起作用: exports.disconnectDB =(回调) - > console.log" DISCONNECTING FROM DB",mongoose.connection.readyState mongoose.disconnect(错误) - > 返回错误如果错误? connections-- console.log"应该断开连接",mongoose.connection.readyState#不是因为state是3 0>断开 return callback()
mongoose.connection'已断开',() - > console.log" DIS",mongoose.connection.readyState return callback()
{ Error: Trying to open unclosed connection.
如何正确开放&关闭我与gulp-jasmine
的连接?
答案 0 :(得分:0)
这似乎有用,但仍然想知道为什么我无法使用disconnected
事件:
connections = 0
disConnectionRetries = 0
MAX_DISCONNECTION_RETRIES = 10
connectDB = (callback) ->
console.log "CONNECTING TO DB", mongoose.connection.connectionState
configDB = require(applicationDir + 'backend/config/database.js')(environment)
if connections == 0
mongoose.connect configDB.url,{auth:{authdb:configDB.authdb}}, (err)->
if (err)
console.log(err)
return callback err
db = mongoose.connection
db.on 'error', console.error.bind(console, 'connection error:')
db.once 'open', () ->
connectionRetries = 0
connections++
return callback null, db
#console.log "Database established"
#Delete all data and seed new data
else
db = mongoose.connection
return callback null, db
exports.disconnectDB = (callback) ->
console.log "DISCONNECTING FROM DB", mongoose.connection.readyState
mongoose.disconnect (err)->
return callback err if err?
connections--
isDisconnected(callback)
isDisconnected = (callback)->
console.log "SHOULD BE DISCONNETCED", mongoose.connection.readyState
throw new Error "Cannot disconnect more than #{MAX_DISCONNECTION_RETRIES} retries" if disConnectionRetries > MAX_DISCONNECTION_RETRIES
if mongoose.connection.readyState == 0
disConnectionRetries = 0
return callback()
else
disConnectionRetries++
return setTimeout ()->
isDisconnected(callback)
, 50