Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

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,842 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,842 points)
edité 1-Dec-2015 par foxmask
...