python - 测试时为真的 Django 变量

标签 python django testing

我想要一个 settings.py 文件,它在运行应用程序时会有不同的行为

./manage.py runserver

测试时

./manage.py test myapp

因此,我可以将测试数据库更改为 sqlite,例如:

if IS_TESTING:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', 
            'NAME': 'test_db',                      
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
            'NAME': DATABASE_NAME,                      
            'USER': DATABASE_USER,                      
            'PASSWORD': DATABASE_PASS,                  
            'HOST': 'localhost',                      
            'PORT': '5432',                      
        }
    }

我可以通过像这样更改 manage.py 脚本来获得此行为:

if __name__ == "__main__":
    os.environ.setdefault('IS_TESTING', 'false')
    print 'off'
    if sys.argv[1] == 'test':
        print 'on'
        os.environ['IS_TESTING'] = 'true'
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "frespo.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

但我认为这还不够好,因为当我在 IDE (PyCharm) 中运行测试时,它不会使用我的自定义 manage.py 文件。 Django 中必须已经有一个变量。你知道它在哪里吗?

最佳答案

如果您只是出于 Django 单元测试目的需要此条件,settings.py 文件中的以下行应该有效:

if 'test' in sys.argv:
    DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'
    SOUTH_TESTS_MIGRATE = False # if you're using south

这假设其他标准 DATABASES 设置总是被声明。在单元测试运行的情况下,上面的行只是将数据库设置为 sqlite

关于python - 测试时为真的 Django 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771659/

相关文章:

python - 无法在 Google Cloud 应用程序上的 Flask 应用程序中流式传输 API 响应

Python:未绑定(bind)方法

python - 制作一个不显示在任务栏中的 GUI

python - Django 显示空字段而不是 ajax 选择小部件 (filter_horizo​​ntal)

java - Selenium 测试 - 无法从日历列表中选择值

python - 使用正则表达式匹配不在字符 < > 内的单词

django - 如何找到相关对象的相关对象的聚合计数最小计数?

python - Django session 中的当前字段值

testing - 未调用的测试如何影响 Go 中的另一个测试?

c# - C# .Net 2.0 是否有基于规范的测试框架?