Django 单元测试 - 配置不正确的错误



我试图为我的模块编写测试。当我运行时:

python manage.py test my_module

我收到消息:

django.core.exceptions.ImproperlyConfigured: Please fill out the database NAME in the settings module before using the database.

我还没有任何测试,只有 BaseTest,我在其中创建用户、组和分配权限。

问题可能出在哪里?服务器正常工作,配置似乎很好。我需要定义测试设置吗?


还行。我想我知道问题是什么:]我有存储在其他模块中的权限列表。所以我正在写from module.perms import perms(普通的python列表)。看起来,python正在做的不仅仅是将该列表从其他模块导入我的模块。这就是失败的原因。

溶液:将列表定义后的代码括起来:

if __name__ == "__main__":
   ...

那么一切都应该运作良好。

好的。我想我知道问题是什么:]我有存储在其他模块中的权限列表。所以我是从module.perms导入perms(普通python列表)编写的。看起来,python正在做的不仅仅是将该列表从其他模块导入我的模块。这就是失败的原因。

解决方案:在列表定义后使用以下命令包围代码:

if __name__ == "__main__":
   ...

那么一切都应该运作良好。

您需要在 settings.py 中设置数据库设置,并且您的应用需要在已安装的应用中。例如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'database.sqlite',
python manage.py test不使用

settings.py DATABASES 中定义的NAME数据库。从文档中 -

需要数据库的测试(即模型测试)将不会使用 "真实"(生产)数据库。创建单独的空白数据库 用于测试。

无论测试通过还是失败,测试数据库都是 执行完所有测试后销毁。

默认情况下,测试数据库通过将 test_ 前缀来获取其名称 在数据库中定义的数据库的名称设置的值。 使用 SQLite 数据库引擎时,默认情况下,测试将使用 内存数据库(即,将在内存中创建数据库, 完全绕过文件系统!如果要使用不同的 数据库名称,在字典中为任何给定指定TEST_NAME 数据库中的数据库。

回答您的问题。可以使用TEST_NAME设置定义测试数据库。但你不应该这样做。

这是人们通过搜索找到它的另一种潜在解决方案:

试图在我的设置文件中定义我自己的TestRunner类,这意味着它必须导入DjangoTestSuiteRunner。 文件顶部的此导入导致ImproperlyConfigured错误。 将自定义 TestRunner 类移动到单独的文件解决了此问题。

最新更新