Жасмин открывать и закрывать соединения БД

У меня есть несколько файлов с юнит-тестами. Я хочу избежать конкататации их. Мне нужно закрыть соединение мангуста для того, чтобы 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
Другие вопросы по тегам