2

使用scalatest和 Casbah,我创建了一个测试来将一堆文档加载到 Mongo 中,然后断言collection.count() > 0.

val collection = MongoConnection()(MY_DB)(MY_COLLECTION) 
collection.dropCollection // clear out any docs from previous test run

insert200DocumentsIntoMongo() // inserts 200 docs into the same DB and collection

assert(collection.size > 0) 

对于多个测试,scalatest抛出断言不正确的异常。

然而,在测试失败后,我可以在 Mongo shell 中清楚地看到,根据上面的“MY_DB”和“MY_COLLECTION”,有 200 个文档被添加到 Mongo 数据库的集合中。

>db.test.count()
200

我很困惑为什么这个断言失败,因为 Mongo shell 表明集合中有 200 个文档。

另外,我尝试使用这篇文章删除整个数据库,但断言仍然失败。

4

2 回答 2

1

尝试改变 mongo 写关注点:

collection.setWriteConcern(WriteConcern.FsyncSafe)
于 2013-10-01T06:22:09.530 回答
1

有几个选项:

一个改变 mongo 写关注点,正如 Sergey 指出的那样。

Mongo 默认异步写入,这意味着当您触发插入时,它不会等待数据插入并继续前进。更改写入关注点将使您的测试工作,但如果您不在生产环境中使用此选项,则可能会掩盖问题,具体取决于您正在测试的内容。

另一种选择是在进行断言之前等待,这可能会更棘手。

最后,您可以使用 getLastError,它将阻止您的执行,直到执行最后一个命令。

在这里阅读更多

于 2013-10-01T12:00:06.023 回答