Асинхронное тестирование с обетами и мангустом - PullRequest
0 голосов
/ 25 августа 2011

Использование Vows / Coffeescript / Mongoose и возникновение асинхронной проблемы с БД.

Перед выполнением моих тестов я делаю кучу настроек, включая очистку тестовой базы данных. После того как я вызвал команду «Удалить» на последнем документе, я запускаю функцию обратного вызова, чтобы обеты могли перейти к следующему этапу теста. Проблема в том, что нет никакой гарантии, что БД будет действительно очищена, поскольку все происходит асинхронно. В этом случае я действительно хочу синхронизировать, но я не уверен, как это сделать.

Вот код (фрагмент Vows, а затем функция очистки def):

'AND the test database is empty': 
  topic: ->
    testDB.purge "widgets_test", @callback

purge = (database, callback) ->
db = mongoose.connect "mongodb://localhost/#{database}"
modelCount = Models.length
for model in Models
    modelCount--
    model.find {}, (err, docs) ->
        docCount = docs.length
        for doc in docs
            doc.remove (err) ->
            docCount--
    # do callback after all data has been purged - setTimeout HACKHACKHACK
        if modelCount is 0 and docCount is 0
            setTimeout -> 
                callback()
            , 100

Как правильно это сделать?

1 Ответ

2 голосов
/ 25 августа 2011

Хитрость, которую я использую, заключается в том, чтобы выполнить настройки / разборки в отдельных пакетах, прежде чем запускать тесты в следующем пакете.

Кажется, это работает для меня (я использую также обеты и Монго)

...