0
使用Vows/Coffeescript/Mongoose並運行到數據庫的異步問題。使用Vows和Mongoose異步測試
在測試運行之前,我做了一堆設置,包括清除測試數據庫。一旦我在最後一個文檔中調用remove,我就會撤消回調,因此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
什麼是做到這一點的正確方法?
是啊,這不是一個壞的解決方案,以確定事情順序運行。但是在上面的例子中,如果沒有setTimeout,你可能已經在數據庫清除之前進入了你的測試。假設你在刪除最後一個模型的最後一個文檔之後,猜測你可以重新編寫fireoff callback()作爲doc.remove回調的一部分。但它仍然很醜陋。 –
您需要觸發回調以確保批次已執行並結束。這是醜陋的,但一些異步工作的問題。 – theprogrammer