我在功能测试期间设置和拆除了我的 MongoDB 数据库。
我的一个模型将使用 GridFS,我将运行该测试(也称为 setup 和 teardown)。假设我们从一个干净的空数据库开始test_repoapi
:
python serve.py testing.ini
nosetests -a 'write-file'
我第二次运行测试时,我得到了这个:
OperationFailure: command SON([('filemd5', ObjectId('518ec7d84b8aa41dec957d3c')), ('root', u'fs')]) failed: need an index on { files_id : 1 , n : 1 }
如果我们看客户:
> use test_repoapi
switched to db test_repoapi
> show collections
fs.chunks
system.indexes
users
这是日志: http: //pastebin.com/1adX4svG
时间戳分为三种:
(1) 最上面的是我第一次启动 web 应用程序的时候
(2) 之前的任何东西23:06:27
都是第一次迭代
(3) 然后一切都是第二次迭代
正如你所看到的,我做了初始化命令来删除数据库。两种可能的解释:
(1) Web 应用程序拥有两个到数据库的活动连接,并且
(2) 某种“锁”会阻止索引完全创建。也fs.files
没有重新创建外观。
解决方法是停止 Web 应用程序,重新启动,然后运行测试;那么错误将不会出现。
顺便说一句,我在我的网络应用程序中使用 Mongoengine 作为我的 ODM。
对此有什么想法吗?