Почему настройки django импортируются дважды, а тестовая база данных создается дважды при выполнении юнит-тестов? - PullRequest
4 голосов
/ 13 июля 2011

Джанго: 1,3; PyCharm: 1.5.3

Я пишу юнит-тесты для приложения Django, которое использует GEOS для сохранения объектов Point. Для локального тестирования я следовал за каждым шагом в настройке серверной части Spatialite в соответствии с документацией GeoDjango.

Я сталкивался с GEOS_ERROR (GEOS_ERROR: геометрия должна быть Point или LineString) всякий раз, когда я пытался создать и сохранить экземпляр модели с объектом Point. Было ясно, что объект Point действительно был передан в функцию get_or_create для модели. И эту же модель можно без проблем сохранить в оболочке.

Не вдаваясь в код, вызвавший эту ошибку, я обнаружил, что каждый раз, когда я запускаю модульный тест, 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. Но когда я запускаю 'python manage.py test' из оболочки терминала, тот же процесс повторяется и выдают те же ошибки.

Я проверил свой файл настроек, но не смог выяснить, почему он дважды запрашивает импорт и почему дважды создавалась тестовая база данных. Требуемый init_spatialite-2. *. Sql для создания базы данных Spatialite также находится в пути проекта.

Любой совет будет высоко оценен!

Обновление : JetBrains сообщил мне, что двойной импорт файла settings.py во время работы runserver можно исправить с помощью этого патча или runserver --noreload. http://code.djangoproject.com/changeset/15911

Однако ошибка импорта все еще сохраняется для тестовых заданий.

1 Ответ

0 голосов
/ 25 марта 2013

Это вызвано, скорее всего, тем, что у вас есть файл settings.py и содержащий пакет в пути импорта.Поскольку настройки можно импортировать в разные модули (settings и myproject.settings), они могут быть выполнены два раза.

Просто убедитесь, что вы всегда используете настройки DJANGO_SETTINGS_MODULE = вместо DJANGO_SETTINGS_MODULE = myproject.settings или удалите __init__.py-файл из каталога, который содержит settings.py

или, что лучше, обновите до django 1.4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...