带有 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:两个相同的设置文件,在运行测试命令时具有不同的行为的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8 和鼻子:冲突的模型?

覆盖范围和鼻子显示来自django的文件,而不仅仅是我的测试

带有动态表单的 Django FormWizard

带有“带有模板标签”方法的 django 静态文件

带有 websocket 的 Django 框架

带有普通 Django 表单和引导程序的 Django-CKEditor