使用Vows和Mongoose进行异步测试

时间:2011-08-25 13:03:21

标签: node.js coffeescript mongoose

使用Vows / Coffeescript / Mongoose并遇到与DB的异步问题。

在我的测试运行之前,我做了一堆设置,包括清除测试数据库。一旦我在最后一个doc上调用了remove,我就会关闭回调,以便Vows可以继续进行测试的下一步。麻烦的是,由于事情发生异步,无法保证数据库实际上已被清除。在这种情况下,我实际上想要同步,但我不知道如何实现这一点。

这是代码(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 个答案:

答案 0 :(得分:2)

我使用的技巧是在后续批处理中运行测试之前,在单独的批处理中执行此设置/拆卸。

它似乎对我有用(我也使用誓言和Mongo)

相关问题