Django unittests - 错误配置错误

时间:2013-01-29 10:39:35

标签: django testing testcase unittest2

我正在尝试为我的模块编写测试。我跑的时候:

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__":
   ...

然后一切都应该运转良好。

4 个答案:

答案 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类移动到单独的文件解决了该问题。