我试图为我的模块编写测试。当我运行时:
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 类移动到单独的文件解决了此问题。