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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

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

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

提问于
用户回答回答于

测试这类事情的最佳方法--从命令本身提取所需的功能到独立的函数或类。它有助于从“命令执行内容”中抽象出来,并且无需额外的需求就可以编写测试。

但是,如果由于某种原因无法解耦逻辑表单命令,可以将它从如下代码中调用:

from django.core.management import call_command

call_command('my_command', 'foo', bar='baz')
用户回答回答于

可以通过执行以下操作来运行任务:

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)

扫码关注云+社区