我想为在数据库表上执行后端操作的Django manage.py命令编写一个单元测试。如何直接从代码中调用管理命令?
我不想从tests.py在操作系统外壳上执行命令,因为我不能使用使用manage.py测试设置的测试环境(测试数据库、测试虚拟电子邮件发件箱等)。
发布于 2009-05-25 19:04:02
测试这些东西的最好方法是将所需的功能从命令本身提取到独立的函数或类中。它有助于从“命令执行内容”中抽象出来,并在没有额外要求的情况下编写测试。
但是,如果您由于某种原因不能解耦逻辑表单命令,您可以使用call_command方法从任何代码中调用它,如下所示:
from django.core.management import call_command
call_command('my_command', 'foo', bar='baz')
发布于 2011-08-02 04:42:07
您可以通过执行以下操作来运行任务,而不是使用call_command技巧:
from myapp.management.commands import my_management_task
cmd = my_management_task.Command()
opts = {} # kwargs for your command -- lets you override stuff for testing...
cmd.handle_noargs(**opts)
发布于 2013-10-26 08:00:46
以下代码:
from django.core.management import call_command
call_command('collectstatic', verbosity=3, interactive=False)
call_command('migrate', 'myapp', verbosity=3, interactive=False)
...is等于在终端中键入的以下命令:
$ ./manage.py collectstatic --noinput -v 3
$ ./manage.py migrate myapp --noinput -v 3
https://stackoverflow.com/questions/907506
复制相似问题