2012-03-02 14 views
14

Tenemos un conjunto de comandos en nuestro sitio Django, algunos que son administrativos y otros que se ejecutan en trabajos cron que no puedo averiguar cómo probarlos. Ellos prácticamente tener este aspecto:Ejecutar el comando de administración Python/Django desde UnitTest/WebTest

# Saved in file /app/management/commands/some_command.py 
# Usage: python manage.py some_command 
from django.core.management.base import NoArgsCommand 
class Command(NoArgsCommand): 
    def handle_noargs(self, **options): 
     # Do something useful 

y tengo algunas pruebas, que se ven así:

import unittest 
from django.test import TestCase 
from django_webtest import WebTest 

class SomeTest(WebTest): 
    fixtures = ['testdata.json'] 

    def setUp(self): 
     self.open_in_browser = False 
     # Set up some objects 

    def test_registration(self): 
     response = self.client.get('/register/') 
     self.assertEqual(response.status_code, 200) 
     form = self.app.get('/register/').forms[1] 
     # Set up the form 
     response = form.submit() 
     self.assertContains(response, 'You are Registered.') 
     if self.open_in_browser: 
      response.showbrowser() 

     # Here I'd like to run some_command to see the how it affects my new user. 

En mi prueba (donde tengo el comentario) Me gustaría dirigir mi NoArgsCommand para ver qué le sucede a mi nuevo usuario. No puedo encontrar ninguna documentación o ejemplos sobre cómo lograr esto. También tenga en cuenta que mi entorno de prueba es una base de datos SQLlite que creo desde cero en la memoria, cargué algunos dispositivos y objetos en y ejecuto mis pruebas, así que por mucho que me gustaría configurar los datos en una base de datos real, simplemente ejecute mi comando desde la línea de comandos, no puedo, es demasiado lento. Cualquier idea sería muy apreciada.

Respuesta

42

Django documentation on management commands puede ayudar, describe cómo llamarlos desde el código python.

Básicamente se necesita algo como esto:

from django.core import management 
management.call_command(...) 
+0

RTFM, do! Gracias, no sabía que eso existía. – scoopseven

+0

Nos sucede a todos, especialmente los viernes :) ¡Y por supuesto, de nada! – kgr

+0

¡Gracias! He intentado ejecutar mi prueba unitaria desde Visual Studio y no pude obtenerla hasta que seguí su enlace de referencia. – TurboGus

Cuestiones relacionadas