Django 1.7 a introduit les migrations de bases de données .
Lors de l'exécution des tests unitaires dans Django 1.7, cela force une migration , qui prend beaucoup de temps. Je voudrais donc ignorer les migrations de django et créer la base de données dans l'état final.
Je sais qu'ignorer les migrations peut être une mauvaise pratique, car cette partie du code ne serait pas testée. Mais ce n'est pas le cas: j'exécute les migrations complètes dans le serveur de test CI (jenkins). Je veux seulement sauter les migrations dans mes tests locaux, où la vitesse compte.
Un peu de contexte:
Jusqu'à Django 1.6 , lors de l'utilisation de South, j'ai utilisé le paramètre SOUTH_TESTS_MIGRATE :
Par défaut, la commande syncdb de South appliquera également les migrations si elle est exécutée en mode non interactif, ce qui inclut le moment où vous exécutez des tests - elle exécutera chaque migration à chaque fois que vous exécutez vos tests.
Si vous voulez que le testeur utilise syncdb au lieu de migrer - par exemple, si vos migrations prennent beaucoup trop de temps à appliquer - définissez simplement SOUTH_TESTS_MIGRATE = False dans settings.py.
Cependant, syncdb n'existe plus, maintenant il migre .
Et à partir de Django 1.8, j'utiliserai le paramètre --keepdb :
L'option --keepdb peut être utilisée pour conserver la base de données de test entre les exécutions de test. Cela a l'avantage de sauter à la fois les actions de création et de destruction, ce qui réduit considérablement le temps d'exécution des tests, en particulier ceux d'une grande suite de tests. Si la base de données de test n'existe pas, elle sera créée lors de la première exécution, puis conservée pour chaque exécution suivante. Toutes les migrations non appliquées seront également appliquées à la base de données de test avant d'exécuter la suite de tests.
Cette question est donc limitée à Django 1.7.
django-test-without-migrations
package a été vraiment pratique pour moi, vous voudrez peut-être changer la réponse acceptée en stackoverflow.com/a/28993456/200224