Question

J'ai créé django-admin personnalisé commandes

Mais, je ne sais pas comment tester dans tests standards django

Était-ce utile?

La solution

Si vous utilisez un autre outil de couverture, il serait bon de l'appeler à partir du code avec:

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.

Autres conseils

Vous devez faire votre script de commande réelle minimum possible, de sorte qu'il appelle simplement une fonction ailleurs. La fonction peut alors être testée par des tests unitaires ou doctests normalement.

vous pouvez voir dans github.com exemple voir ici

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.")

Une alternative simple à stdout analyse syntaxique est de rendre votre commande la gestion de sortie avec un code d'erreur si elle ne fonctionne pas correctement, par exemple en utilisant sys.exit (1).

Vous pouvez prendre cela dans un test avec:

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

Je suis d'accord avec Daniel que le script de commande réelle devrait faire le minimum possible, mais vous pouvez également tester directement dans un test unitaire Django en utilisant os.popen4.

vous pouvez à partir de votre test unitaire une commande comme

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

Vous pouvez ensuite analyser le contenu du résultat pour vérifier si votre commande Django a réussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top