Mongo Shell显示已添加的文档,但在Scalatest中断言失败

时间:2013-10-01 02:45:27

标签: mongodb scala scalatest casbah

使用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个文档。

另外,我尝试使用此post删除整个数据库,但断言仍然失败。

2 个答案:

答案 0 :(得分:1)

尝试更改mongo写入问题:

collection.setWriteConcern(WriteConcern.FsyncSafe)

答案 1 :(得分:1)

有几个选择:

一个改变mongo写作关注的问题,谢尔盖指出。

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

另一种选择是在做断言之前等待,这可能比较棘手。

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

了解更多here