首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何直接从测试驱动程序调用自定义Django manage.py命令?

如何直接从测试驱动程序调用自定义Django manage.py命令?
EN

Stack Overflow用户
提问于 2009-05-25 17:39:06
回答 5查看 76.9K关注 0票数 199

我想为在数据库表上执行后端操作的Django manage.py命令编写一个单元测试。如何直接从代码中调用管理命令?

我不想从tests.py在操作系统外壳上执行命令,因为我不能使用使用manage.py测试设置的测试环境(测试数据库、测试虚拟电子邮件发件箱等)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-25 19:04:02

测试这些东西的最好方法是将所需的功能从命令本身提取到独立的函数或类中。它有助于从“命令执行内容”中抽象出来,并在没有额外要求的情况下编写测试。

但是,如果您由于某种原因不能解耦逻辑表单命令,您可以使用call_command方法从任何代码中调用它,如下所示:

from django.core.management import call_command

call_command('my_command', 'foo', bar='baz')
票数 360
EN

Stack Overflow用户

发布于 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)
票数 23
EN

Stack Overflow用户

发布于 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

参见running management commands from django docs

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/907506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档