带有 django-nose 的 Django:两个相同的设置文件,在运行测试命令时具有不同的行为
Posted
技术标签:
【中文标题】带有 django-nose 的 Django:两个相同的设置文件,在运行测试命令时具有不同的行为【英文标题】:Django with django-nose: two identical settings files with different behavior in running test command 【发布时间】:2013-04-05 13:10:26 【问题描述】:对于 Django 1.4.5,我使用的是 django-nose 1.1.0。
我有两个没有差异的设置文件。
-> % diff local_settings.py test_settings/sqlite.py
我运行测试:
-> % python manage.py test foo --settings=local_settings
我明白了
Ran 91 tests in 5.273s
OK (SKIP=6)
从不同的位置运行相同的设置
-> % python manage.py test foo --settings=test_settings.sqlite
测试在没有运行的情况下退出:
Ran 43 tests in 1.230s
FAILED (errors=1)
我得到了回溯,DatabaseError: no such table: django_content_type
回溯来自于 url 的加载。在那里实例化的东西调用ContentType.objects.get_for_model(self.model)
。当设置相同时,这种差异怎么可能?
我的 manage.py 文件是通用的:
#!/usr/bin/env python
from django.core import management
if __name__ == "__main__":
management.execute_from_command_line()
【问题讨论】:
如果将local_settings
移动到test_settings
包下并使用--settings=test_settings.local_settings
再次运行测试会发生什么?另外,请检查test_settings/__init__.py
中是否有任何内容。
相同,__init__.py
中没有任何内容
理想情况下,查看相同设置文件中的内容会很棒。
【参考方案1】:
您的数据库 NAME
是否设置为 sqlite DB 的相对路径?
如果是这样,您可能只需要在 test_settings 中将设置文件与您的设置文件同步。
DatabaseError: no such table: django_content_type
表示未找到 django 特定表之一,这听起来像是数据库本身的问题,而不是您的应用程序或设置文件本身。
【讨论】:
如果你运行python manage.py syncdb --settings=test_settings.sqlite
然后再次运行测试命令会发生什么?以上是关于带有 django-nose 的 Django:两个相同的设置文件,在运行测试命令时具有不同的行为的主要内容,如果未能解决你的问题,请参考以下文章