Django 测试运行器忽略 --settings 选项

2 投票
2 回答
1181 浏览
提问于 2025-04-17 02:56

我想为我的Django应用测试使用一套不同的配置(比如,用内存中的sqlite3代替mysql),为此我想用另一个设置模块。我是这样运行我的测试的:

python manage.py test --settings=test_settings

但是Django似乎忽略了我的test_settings模块。我是不是做错了什么?

2 个回答

1

我刚遇到这个问题,确认在Django 1.6.1版本中,--settings这个选项被忽略了。我在Django的错误追踪系统上提交了一个问题:https://code.djangoproject.com/ticket/21635#ticket

2

test_settings是一个文件还是一个文件夹呢?

这是我加载不同测试设置的方法。在settings.py文件的底部:

# if manage.py test was called, use test settings
if 'test' in sys.argv:
    try:
        from test_settings import *
    except ImportError:
        pass

超级加分!如果你想在测试中使用sqlite3,记得要开启完整性约束,这样你就能得到和mysql一样的外键异常(我在这上面浪费了很多时间)。在你项目的某个文件中:

from django.db.backends.signals import connection_created
def activate_foreign_keys(sender, connection, **kwargs):
    """Enable integrity constraint with sqlite."""
    if connection.vendor == 'sqlite':
        cursor = connection.cursor()
        cursor.execute('PRAGMA foreign_keys = ON;')

connection_created.connect(activate_foreign_keys)

撰写回答