【问题标题】:Unit testing failure using django-mongo-engine使用 django-mongo-engine 的单元测试失败
【发布时间】:2013-01-19 19:01:47
【问题描述】:

我使用 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(using=using)中

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

文件“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 func(*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”成功时测试会失败。关于如何解决此问题的任何想法?

谢谢!

【问题讨论】:

  • 我知道使用sqlite你不需要settings.py文件中的USERPASSWORD,但是我不知道使用mongodb,不是需要吗?

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


【解决方案1】:

所以看起来你在运行测试时没有连接到 mongodb 实例的测试设置,因为你是从命令行运行它,也许可以尝试做这样的事情

您有 2 个设置文件,lsettings.py 未连接,而 settings.py 已连接

from lsettings import *
mongodb.connect()

So, while locally testing you can:

python manage.py test --settings=lsettings

希望这可以解决您的问题。 :)

【讨论】:

  • 我认为它不起作用。您提供的答案似乎与link 中的答案相同,但我们面临不同的问题。我也想在测试中使用 mongodb
【解决方案2】:

问题在于 this later question 中所述的加载装置。

您可以按照the corresponding answer 中的描述,用正确的 ObjectId 替换您的灯具中的 id 来修复它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2018-11-25
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多