我正在尝试为我的模块编写测试。我跑的时候:
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__":
...
然后一切都应该运转良好。
答案 0 :(得分:1)
确定。我想我知道问题是什么:]我的列表中包含存储在其他模块中的权限。所以我从module.perms import perms(普通的python列表)写。看起来,python正在做的不仅仅是从其他模块导入到我的模块的列表。这就是失败的原因。
解决方案:列表定义后的环绕代码:
if __name__ == "__main__":
...
然后一切都应该运转良好。
答案 1 :(得分:0)
您需要在settings.py中设置DATABASE设置,并且您的应用需要在已安装的应用中。例如:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'database.sqlite',
答案 2 :(得分:0)
python manage.py test
不使用settings.py NAME
中定义的DATABASES
数据库。来自docs -
需要数据库的测试(即模型测试)将不会使用您的 “真实”(生产)数据库。创建单独的空白数据库 进行测试。
无论测试通过还是失败,测试数据库都是 所有测试都已执行时被销毁。
默认情况下,测试数据库通过预先添加test_来获取其名称 DATABASES中定义的数据库的NAME设置的值。 使用SQLite数据库引擎时,测试将默认使用 内存数据库(即数据库将在内存中创建, 彻底绕过文件系统!)。如果你想使用不同的 数据库名称,在字典中为任何给定指定TEST_NAME 数据库在DATABASES。
回答你的问题。您可以使用TEST_NAME
setting定义测试数据库。但你不应该这样做。
答案 3 :(得分:0)
这是人们通过搜索找到这个问题的另一个潜在解决方案:
我试图在我的设置文件中定义自己的TestRunner
类,这意味着它必须导入DjangoTestSuiteRunner
。文件顶部的导入导致ImproperlyConfigured
错误。将自定义TestRunner类移动到单独的文件解决了该问题。