我使用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”成功时失败。关于如何解决这个问题的任何想法?
谢谢!
答案 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测试不会通过。