作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个 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/
我正在使用以下查询: SELECT tblTxn.Currency, tblTxn.Amount, tblTxn.Desc, tblAccounts.Account, tblTxn.Type FROM
我是一名优秀的程序员,十分优秀!