【问题标题】:Django test runner ignoring the --settings optionDjango 测试运行程序忽略 --settings 选项
【发布时间】:2011-11-23 16:28:24
【问题描述】:

我正在尝试使用一组不同的配置来测试我的 django 应用程序(例如,使用内存中的 sqlite3 而不是 mysql),为此我正在尝试使用另一个设置模块。我以这种方式运行测试:

python manage.py test --settings=test_settings

但 Django 似乎忽略了我的 test_settings 模块。我做错了吗?

【问题讨论】:

    标签: python django testing configuration


    【解决方案1】:

    我刚刚碰到这个并确认在 Django 1.6.1 上 --settings 选项被忽略了。 我在 Django 错误跟踪器上提交了一张票: https://code.djangoproject.com/ticket/21635#ticket

    【讨论】:

    • 是的,我知道。这就是为什么我需要从现在开始手动更改 manage.py。这不是最佳的,但我需要让它工作:(
    【解决方案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)
    

    【讨论】:

    • test_settings 是一个 Python 模块 (test_settings.py)。感谢您对交易的解释。我在这个项目中并没有真正使用事务,我需要做第二个代码吗?
    • 糟糕!我的意思是“外键约束”,而不是“交易”。编辑了我的答案。
    猜你喜欢
    • 2016-01-30
    • 2023-03-05
    • 1970-01-01
    • 2015-01-15
    • 2016-09-14
    • 2011-01-03
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多