2010-02-24 17 views
20

En este momento, si quiero ejecutar las pruebas de todas mis aplicaciones, que van:¿Cómo ejecuto pruebas solo para todas mis aplicaciones de Django?

python manage.py test app1 app2 app3 

Si me quedo:

python manage.py test 

La prueba de todas las aplicaciones en INSTALLED_APPS se ejecutan, incluyendo el Django unos. ¿Hay un comando simple para ejecutar las pruebas de todas las aplicaciones que he creado?

Respuesta

23

Tristemente no hay tal comando. Django no tiene manera de decir qué aplicaciones son "tuyas" frente a cuáles son de otra persona.

Lo que sugeriría es escribir un nuevo comando de administración, llámalo mytest. Luego crea una nueva configuración MY_INSTALLED_APPS. El comando mytest solo ejecutará la prueba para cada aplicación en MY_INSTALLED_APPS. Querrá que el comando mytest subclase django.core.management.base.AppCommand. django.core.management.call_command también será útil.

El único problema con este método es que tendrá que mantener constantemente la configuración MY_INSTALLED_APPS para asegurarse de que sea correcta.

+11

esta solución se puede hacer mediante la combinación de DRY MY_INSTALLED_APPS con INSTALLED_APPS en 'settings.py'. Entonces solo es cuestión de decidir si desea que la aplicación se ejecute con 'mytest' o no cuando la agregue a la configuración. –

+0

Brandon, buena idea. ¡Gracias! – Apreche

1

Esto funciona mejor en Django 1.6 +: cuando se ejecuta python manage.py test, sólo sus pruebas se ejecutarán (suponiendo que tiene la configuración predeterminada para TEST_RUNNER)

2

puede crear una administración/comandos /testmyapps.py para uno de su aplicación que tiene:

from django.core.management.base import BaseCommand, CommandError 
import django.core.management.commands.test 
from django.core import management 
from django.conf import settings 

class Command(django.core.management.commands.test.Command): 
    args = '' 
    help = 'Test all of MY_INSTALLED_APPS' 

    def handle(self, *args, **options): 
     super(Command, self).handle(*(settings.MY_INSTALLED_APPS + args), **options) 
Cuestiones relacionadas