Ne lancer des Tests Unitaires que sur les appli de INSTALLED_APPS

+2 votes

Je pose la question ici des fois que vous ayez déjà eu le besoin :

ya un moyen à ce que quand on tape

python manage.py test

ca ne lance pas les tests des app django qui ne sont pas dans le INSTALLED_APPS ?

J'ai des folders d'appli django dans le dossier du projet mais comme les appli ne sont pas dans INSTALLED_APPS ; ca pete des erreurs sur l'absence des tables de chaque app

A part faire

python manage.py test app1 app2 app3

j'ai pas trouvé mieux, mais ca me gène d'avoir à les spécifier sur la ligne de commandes ; un switch aurait été pratique je trouve pour gerer ce cas là

Sur irc://irc.freenode.net/django-fr on m'a suggéré

11:25 < bmispelon> foxmask: tu peux peut etre faire un "custom test runner": 
https://docs.djangoproject.com/en/1.8/topics/testing/advanced/#using-different-testing-frameworks

Et il semblerait que je ne sois pas le seul à me poser la question

Avez vous déjà rencontré ce besoin et comment y avez vous remédié ?

demandé 26-Nov-2015 par foxmask (2,892 points)
edité 26-Nov-2015 par foxmask

Ecrire un alias shell? Ecrire un makefile? Ajouter un if 'test' in sys.argv[1:] dans ton settings?

idéalement, une sous-commande django comme quand on fait

python manage.py test -v2 

par exemple.

Je regarde l'histoire d'un TEST RUNNER "home made"

J'avoue que la réponse m'intéresse également, notre projet commence à avoir beaucoup d'applications.

1 Réponse

0 votes
 
Meilleure réponse

Solution :

settings.py

TEST_RUNNER = 'mon_app.runner.MaClassDiscoverRunner'

runner.py

from django.conf import settings
from django.test.runner import DiscoverRunner


class MaClassDiscoverRunner(DiscoverRunner):
    """
    A Django test runner that uses unittest2 test discovery.
    """
    def run_tests(self, test_labels, extra_tests=None, **kwargs):
    """
    Run the unit tests for all the test labels in the provided list.
    Test labels should be dotted Python paths to test modules, test
    classes, or test methods.
    A list of 'extra' tests may also be provided; these tests
    will be added to the test suite.
    Returns the number of tests that failed.
    """
    self.setup_test_environment()
    for installed_app in settings.INSTALLED_APPS:
        test_labels = test_labels + (installed_app,)
    suite = self.build_suite(test_labels, extra_tests)
    old_config = self.setup_databases()
    result = self.run_suite(suite)
    self.teardown_databases(old_config)
    self.teardown_test_environment()
    return self.suite_result(suite, result)

Et à présent, selon le contenu de settings.INSTALLED_APPS, les tests tournent

répondu 30-Nov-2015 par foxmask (2,892 points)
edité 1-Dec-2015 par foxmask
...