Жасмин открывать и закрывать соединения БД
У меня есть несколько файлов с юнит-тестами. Я хочу избежать конкататации их. Мне нужно закрыть соединение мангуста для того, чтобы gulp-jasmine
выйти. Я также хочу избежать обработки соединения в 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()
Затем Жасмин выполняет следующее описание beforeAll
до afterAll
может отключить БД правильно.
(Жасмин Документы) [http://jasmine.github.io/2.1/introduction.html#section-Setup_and_Teardown]
Однако будьте осторожны, используя be foreAll и 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 "ОТКЛЮЧЕНИЕ ОТ БД", mongoose.connection.readyState mongoose.disconnect (err)-> вернуть callback err if err? connections-- console.log "ДОЛЖЕН БЫТЬ ОТКЛЮЧЕН", mongoose.connection.readyState #is не потому, что состояние равно 3 0> отключение обратного вызова ()
mongoose.connection 'отключено', () -> console.log "DIS", mongoose.connection.readyState возвращает обратный вызов ()
ошибка
{ Error: Trying to open unclosed connection.
Вопрос
Как правильно открывать и закрывать мои связи с gulp-jasmine
?
1 ответ
Кажется, это работает, все еще удивляясь, почему я не могу использовать 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