So testen Sie benutzerdefinierte Django-Admin-Befehle
-
18-09-2019 - |
Frage
ich erschuf Benutzerdefinierte Django-Admin-Befehle
Aber ich weiß nicht, wie ich es testen soll Standard -Django -Tests
Lösung
Wenn Sie ein Decktool verwenden, wäre es gut, es aus dem Code mit:
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.
Andere Tipps
Sie sollten Ihr tatsächliches Befehlskript zum Minimum ermöglichen, damit es nur eine Funktion an anderer Stelle aufruft. Die Funktion kann dann als normal über Unit -Tests oder Dokten getestet werden.
Sie können in Github.com Beispiel sehensiehe hier
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.")
Eine einfache Alternative zu Stdout analysieren soll Ihren Verwaltungsbefehl mit einem Fehlercode beenden, wenn er nicht erfolgreich ausgeführt wird, beispielsweise mit sys.exit (1).
Sie können dies in einem Test mit:
with self.assertRaises(SystemExit):
call_command('mycommand')
Ich stimme Daniel zu, dass das tatsächliche Befehlskript das Minimum möglich machen sollte, aber Sie können es auch direkt in einem Django -Unit -Test testen os.popen4
.
Innerhalb Ihres Unit -Tests können Sie einen Befehl wie haben
fin, fout = os.popen4('python manage.py yourcommand')
result = fout.read()
Sie können dann den Ergebnisinhalt analysieren, um zu testen, ob Ihr Django -Befehl erfolgreich war.