为什么在运行单元测试时,django 设置会导入两次,并且测试数据库会创建两次?

2024-02-28

姜戈:1.3;皮查姆:1.5.3

我正在为使用 GEOS 保存 Point 对象的 Django 应用程序编写单元测试。对于本地测试,我按照 GeoDjango 文档遵循了自定义 Spatialite 后端的每一步。

每当我尝试使用 Point 对象创建和保存模型实例时,我都会遇到 GEOS_ERROR(GEOS_ERROR:几何图形必须是 Point 或 LineString)。很明显,确实在模型的 get_or_create 函数中传递了一个 Point 对象。并且在shell中可以毫无问题地保存相同的模型。

在没有过多了解导致此错误的代码的情况下,我发现每次运行单元测试时,Django 都会导入设置,创建测试数据库并立即销毁数据库,然后再次创建测试数据库以进行最终的测试会抛出错误。

Testing started at 5:09 PM ...<br />
Importing Django settings module settings
SpatiaLite version ..: 2.4.0    Supported Extensions:
    - 'VirtualShape'    [direct Shapefile access]
    - 'VirtualText'[direct CSV/TXT access]
    - 'VirtualNetwork   [Dijkstra shortest path]
    - 'RTree'       [Spatial Index - R*Tree]
    - 'MbrCache'        [Spatial Index - MBR cache]
    - 'VirtualFDO'      [FDO-OGR interoperability]
    - 'SpatiaLite'      [Spatial SQL - OGC]
PROJ.4 Rel. 4.7.1, 23 September 2009
GEOS version 3.3.0-CAPI-1.7.0Creating test database 'default'...
Destroying old test database 'default'...
SpatiaLite version ..: 2.4.0    Supported Extensions:
(same Spatialite settings again)
cannot start a transaction within a transaction
cannot rollback transaction - SQL statements in progress
Syncing...
Creating tables ...

我怀疑这是 PyCharm 造成的。但是当我从终端 shell 运行“python manage.py test”时,重复相同的过程并抛出相同的错误。

我检查了我的设置文件,但找不到为什么它提示自己导入两次以及为什么测试数据库创建了两次。创建 Spatialite 数据库所需的 init_spatialite-2.*.sql 也在项目路径中。

任何建议将不胜感激!

Update: JetBrains 告诉我,可以使用此补丁或 runserver --noreload 来修复 runserver 期间两次导入 settings.py 的问题。http://code.djangoproject.com/changeset/15911 http://code.djangoproject.com/changeset/15911

但是,测试任务的导入错误仍然存​​在。


这很可能是因为您在导入路径上同时拥有 settings.py 和包含包。因为设置可以在不同的模块(settings 和 myproject.settings)下导入,所以它可以执行两次。

只需确保始终使用 DJANGO_SETTINGS_MODULE=settings 而不是 DJANGO_SETTINGS_MODULE=myproject.settings 或从包含 settings.py 的目录中删除 __init__.py 文件

或者,更好的是,升级到 django 1.4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在运行单元测试时,django 设置会导入两次,并且测试数据库会创建两次? 的相关文章

随机推荐