我们的网站使用 Python 和 Django。我们设置一个测试命令,添加到默认的 Django 测试命令中:
from django.core.management.commands import test
class Command(test.Command):
def add_arguments(self, parser):
super().add_arguments(parser=parser)
group = parser.add_argument_group('language options', 'These arguments are mutually exclusive. Default: --test-default-languages')
language_group = group.add_mutually_exclusive_group()
language_group.add_argument(
"--test-all-languages",
action="store_true",
help="Run tests for all languages, and don't skip languages.",
)
language_group.add_argument(
"--test-default-languages",
action="store_true",
help="Run tests for default languages (English, French, Hebrew + randomly select one more language or none).",
)
language_group.add_argument(
"--test-only-english",
action="store_true",
help="Run tests for only English.",
)
# ...
现在,在模型中我们有以下代码:
class SiteDiscoverRunner(DiscoverRunner):
def __init__(self, *args, **kwargs):
# ...
super().__init__(*args, **kwargs)
self.test_all_languages = kwargs.get('test_all_languages', False)
self.test_default_languages = kwargs.get('test_default_languages', False)
self.test_only_english = kwargs.get('test_only_english', False)
if ((self.test_all_languages is False) and (self.test_only_english is False)):
self.test_default_languages = True
测试必须使用上述命令行参数之一运行,或者不使用。如果没有,则
test_default_languages
值应该为 true。
我想知道如果没有给出 3 个参数,解析器是否可以使
self.test_default_languages
为 True,这样我就可以删除模型中的命令 self.test_default_languages = True
?我搜了一下没找到怎么做。
我在 discuss.python.org 上提问并得到了答复,我找到了解决方案:
测试命令:
from django.core.management.commands import test
class Command(test.Command):
def add_arguments(self, parser):
super().add_arguments(parser=parser)
group = parser.add_argument_group('language options', 'These arguments are mutually exclusive. Default: --test-default-languages')
language_group = group.add_mutually_exclusive_group()
language_group.add_argument(
"--test-all-languages",
action="store_const",
const="test-all-languages",
dest="test_languages",
help="Run tests for all languages, and don't skip languages.",
)
language_group.add_argument(
"--test-default-languages",
action="store_const",
const="test-default-languages",
dest="test_languages",
help="Run tests for default languages (English, French, Hebrew + randomly select one more language or none).",
)
language_group.add_argument(
"--test-only-english",
action="store_const",
const="en",
dest="test_languages",
help="Run tests for only English.",
)
language_group.add_argument(
"--test-only-language-code",
action="store",
dest="test_languages",
help="Run tests for only one language (the given language code).",
type=str,
)
parser.set_defaults(test_languages="test-default-languages")
# Running tests with --test-only-language-code en is equivalent to running tests with --test-only-english.
# ...
在模型中:
class SiteDiscoverRunner(DiscoverRunner):
def __init__(self, *args, **kwargs):
# ...
super().__init__(*args, **kwargs)
self.test_languages = kwargs.get('test_languages', None)
# ...
assert (self.test_languages in {'test-all-languages', 'test-default-languages', 'en', 'fr', 'de', 'es', 'pt', 'it', 'nl', 'sv', 'ko', 'fi', 'he'})
# ...
注意,我还添加了参数“--test-only-language-code”。后面是语言代码,例如“en”。