アプリケーションの実行時に異なる動作をする単一の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 内にすでに変数が必要です。どこか分かりますか?