我們所做的是覆蓋默認test_runner所以它不會創建一個新的數據庫來測試對。通過這種方式,它可以針對我們當前的本地數據庫外觀進行測試。但是,如果您使用此方法,請非常小心,因爲您在測試中對數據進行的任何更改都將是永久性的。我確信我們所有的測試都能將所有的變化恢復到原來的狀態,並將我們原始版本的數據庫保存在服務器上並進行備份。
因此,要做到這一點,你需要從django.test.simple複製RUN_TEST方法在項目中的位置 - 我把礦的myproject /測試/ test_runner.py
然後進行以下修改該方法:
// change
old_name = settings.DATABASE_NAME
from django.db import connection
connection.creation.create_test_db(verbosity, autoclobber=not interactive)
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
connection.creation.destroy_test_db(old_name, verbosity)
// to:
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
確保做到在頂部所有必要的進口,然後在你的設置文件中設置的設置:
TEST_RUNNER = 'myproject.test.test_runner.run_tests'
現在,當你運行。 /manage.py測試Django將針對數據庫的當前狀態運行測試,而不是根據當前的模型定義創建新版本。
你可以做的另一件事情是在本地創建數據庫的副本,然後做一次檢查在新RUN_TEST()方法是這樣的:
if settings.DATABASE_NAME != 'my_test_db':
sys.exit("You cannot run tests using the %s database. Please switch DATABASE_NAME to my_test_db in settings.py" % settings.DATABASE_NAME)
這樣,沒有運行測試對危險的主數據庫。