使用django-mongo-engine进行单元测试失败

时间:2013-02-04 23:22:36

标签: django mongodb unit-testing django-nonrel django-mongodb-engine

我使用django 1.3,Mongodb和django-mongo-engine建立了一个网站。当我使用“manage.py runserver”运行服务器时,它是成功的。但是当我尝试通过“manage.py test”进行单元测试时,它却以某种方式失败了。

以下是有关数据库的settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine', 
        'NAME': 'sean_test',                     
        'USER': '',                    
        'PASSWORD': '',                  
        'HOST': '',                      
        'PORT': '',                      
    }
}

这是测试中的错误消息:

  

....问题安装夹具'c:\ Python27 \ lib \ sitepackages \ django \ contrib \ auth \ fixtures \ authtestdata.json':Traceback(最近一次调用最后一次):

     

文件“c:\ Python27 \ lib \ site-packages \ django \ core \ management \ commands \ loaddata.py”,第174行,在handleobj.save中(使用=使用)

     

文件“c:\ Python27 \ lib \ site-packages \ django \ core \ serializers \ base.py”,第165行,在savemodels.Model.save_base中(self.object,using = using,raw = True)< / p>      

文件“c:\ Python27 \ lib \ site-packages \ django \ db \ models \ base.py”,第573行,在save_baseresult = manager._insert(values,return_id = update_pk,using = using)

     

文件“c:\ Python27 \ lib \ site-packages \ django \ db \ models \ manager.py”,第195行,在_insertreturn insert_query(self.model,values,** kwargs)

     

文件“c:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py”,第1438行,在insert_queryreturn query.get_compiler中(using = using).execute_sql(return_id)

     

文件“c:\ Python27 \ lib \ site-packages \ djangotoolbox \ db \ basecompiler.py”,第369行,在execute_sqlvalue = self.convert_value_for_db(db_type,value)

     

文件“c:\ Python27 \ lib \ site-packages \ django_mongodb_engine \ compiler.py”,第67行,在wrapperreturn函数中(* args,** kwargs)

     

文件“c:\ Python27 \ lib \ site-packages \ django_mongodb_engine \ compiler.py”,第307行,在convert_value_for_dbraise InvalidId(msg)

     

InvalidId:AutoField(默认主键)值必须是表示MongoDB上的ObjectId的字符串(取而代之的是u'1')

我知道django使用整数,而mongodb使用字符串作为主键,但我不知道为什么测试会在“runserver”成功时失败。关于如何解决这个问题的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

因此,在运行测试时,您似乎没有连接到mongodb实例的测试设置,因为您从命令行运行它可能尝试做类似这样的事情

你有2个设置文件,lsettings.py没有连接,settings.py没有连接

from lsettings import *
mongodb.connect()

So, while locally testing you can:

python manage.py test --settings=lsettings

希望能解决你的问题。 :)

答案 1 :(得分:0)

问题在于如this later question中所述加载灯具。

您可以使用the corresponding answer中所述的适当的ObjectId替换灯具中的ID来修复它。

从追溯中,问题在于django.contrib.auth提供的“authtestdata.json”灯具。由于这些与ObjectIds不兼容,您需要更新测试以使用不同的灯具,或者如果无法更新它们,则跳过失败的测试。例如,Django的auth测试不会通过。