Domanda Come testare i comandi personalizzati di django-admin


ho creato comandi personalizzati di django-admin

Ma, non so come testarlo test di django standard


44
2017-08-17 08:04


origine


risposte:


Se stai usando uno strumento di copertura, sarebbe bene chiamarlo dal codice con:

from django.core.management import call_command
from django.test import TestCase

class CommandsTestCase(TestCase):
    def test_mycommand(self):
        " Test my custom command."

        args = []
        opts = {}
        call_command('mycommand', *args, **opts)

        # Some Asserts.

78
2018-06-28 21:37



Dovresti rendere il tuo script di comando effettivo il minimo possibile, in modo che chiami semplicemente una funzione altrove. La funzione può quindi essere testata tramite unit test o doctest come di consueto.


15
2017-08-17 14:37



puoi vedere nell'esempio su github.com Vedere qui

def test_command_style(self):
    out = StringIO()
    management.call_command('dance', style='Jive', stdout=out)
    self.assertEquals(out.getvalue(),
        "I don't feel like dancing Jive.")

7
2018-01-22 06:48



Sono d'accordo con Daniel sul fatto che lo script di comando effettivo dovrebbe fare il minimo possibile ma puoi anche testarlo direttamente in un test di unità Django usando os.popen4.

Dal tuo test unitario puoi avere un comando simile

fin, fout = os.popen4('python manage.py yourcommand')
result = fout.read()

È quindi possibile analizzare il contenuto del risultato per verificare se il comando Django ha avuto successo.


1
2018-01-09 00:49



Una semplice alternativa a analizzando lo stdout è quello di far uscire il comando di gestione con un codice di errore se non viene eseguito correttamente, ad esempio utilizzando sys.exit (1).

Puoi prenderlo in un test con:

    with self.assertRaises(SystemExit):
        call_command('mycommand')

0
2017-08-04 11:39