首页 > 解决方案 > AttributeError:类型对象“NoDbTestRunner”没有属性“split”

问题描述

我正在尝试为 Django 2.0 和 python3 创建一个 DiscoverRunner 以跳过数据库创建,但出现此错误:

File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/core/management/commands/test.py", line 26, in run_from_argv
super().run_from_argv(argv)
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/core/management/base.py", line 280, in run_from_argv
parser = self.create_parser(argv[0], argv[1])
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/core/management/base.py", line 254, in create_parser
self.add_arguments(parser)
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/core/management/commands/test.py", line 47, in add_arguments
test_runner_class = get_runner(settings, self.test_runner)
File "/home/mlmireles/.virtualenvs/risk-analysis/lib/python3.6/site-packages/django/test/utils.py", line 306, in get_runner
test_path = test_runner_class.split('.')
AttributeError: type object 'NoDbTestRunner' has no attribute 'split'

这是跑步者的代码:

from django.test.runner import DiscoverRunner

class NoDBTestRunner(DiscoverRunner):
    def setup_databases(self, **kwargs):
        pass

    def teardown_databases(self, *args, **kwargs):
        pass

标签: pythondjangotest-runner

解决方案


在Django 文档中的 test_class_runner中, 您会注意到 settings.TEST_RUNNER 需要一个由句点分隔的字符串“。”。sting.split 可以 [在 python 中找到] 文档(https://docs.python.org/3.7/library/stdtypes.html#str.split

因此,在您的设置文件中,您应该像这样设置 TEST_RUNNER 变量:

TEST_RUNNER = 'yourapp.settings_file.NoDbTestRunner'

假设您的应用程序结构如下所示,并且您的 NoDBTestRunner 类也在您的 settings_file.py 文件中。如果该类不是,您只需将 TEST_RUNNER 的引用更改为指向您的 NoDbTestRunner 所在的位置。

  • 你的应用文件夹
    • settings_file.py # 这个文件是你设置变量的地方

推荐阅读