Ce que nous avons fait était remplacer le test_runner par défaut de sorte qu'il ne serait pas créer une nouvelle base de données pour effectuer le test. De cette façon, il exécute le test contre tout ce qui ressemble à notre base de données locale actuelle. Mais soyez très prudent si vous utilisez cette méthode car toute modification des données que vous effectuez dans vos tests sera permanente. Je me suis assuré que tous nos tests restaure tous les changements à leur état d'origine, et conserve notre version vierge de notre base de données sur le serveur et sauvegardée.
Donc, pour ce faire, vous devez copier la méthode RUN_TEST de django.test.simple à un emplacement dans votre projet - je mets le mien dans myproject/test/test_runner.py
Ensuite, faire les modifications suivantes cette méthode:
// 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)
Assurez-vous de faire toutes les importations nécessaires en haut, puis dans les paramètres ensemble de fichiers le réglage:
TEST_RUNNER = 'myproject.test.test_runner.run_tests'
maintenant lorsque vous exécutez. /manage.py test Django exécute les tests sur l'état actuel de votre base de données plutôt que de créer une nouvelle version basée sur vos définitions de modèle actuelles.
Une autre chose que vous pouvez faire est de créer une copie de votre base de données locale, puis effectuez une vérification dans votre nouvelle méthode RUN_TEST() comme ceci:
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)
De cette façon, il n'y a pas de danger de tests en cours d'exécution contre votre base de données principale.