如何测试自定义django-admin命令

rlcwz9us  于 2023-01-27  发布在  Go
关注(0)|答案(6)|浏览(124)

我创建了custom django-admin commands
但是,我不知道如何在standard django tests中测试它

ilmyapht

ilmyapht1#

如果你正在使用一些覆盖工具,最好从代码中调用它:

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.

从官方文件来看
管理命令可以用call_command()函数测试,输出可以重定向到StringIO示例

qhhrdooz

qhhrdooz2#

你应该尽可能地减少你的命令脚本,这样它就可以调用其他地方的函数,然后这个函数就可以通过单元测试或者文档测试来测试了。

91zkwejq

91zkwejq3#

您可以在www.example.com中查看github.com示例see here

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

oxalkeyp4#

添加到这里已经发布的内容中。如果你的django-admin命令传递了一个文件作为参数,你可以这样做:

from django.test import TestCase
from django.core.management import call_command
from io import StringIO
import os

class CommandTestCase(TestCase):
    def test_command_import(self):
        out = StringIO()
        call_command(
            'my_command', os.path.join('path/to/file', 'my_file.txt'),
            stdout=out
        )
        self.assertIn(
        'Expected Value',
            out.getvalue()
        )

当你的django-command以这样的方式使用时,这是有效的:

$ python manage.py my_command my_file.txt
nzrxty8p

nzrxty8p5#

解析stdout的一个简单的替代方法是,如果管理命令运行不成功,让它退出时显示一个错误代码,例如使用sys.exit(1)。
您可以在以下测试中捕获此问题:

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

p4rjhz4m6#

我同意丹尼尔的观点,实际的命令脚本应该尽可能少地执行,但是您也可以使用os.popen4在Django单元测试中直接测试它。
在单元测试中,您可以使用如下命令

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

然后你可以分析result的内容来测试Django命令是否成功。

相关问题