LINUX.ORG.RU

Flask и MongoDB (опять)

 , , ,


0

1

На проблему из прошлого треда нашёлся таки ответ - забыл сделать import views (да, в вопросе надо было дать ссылку на сам проект, тогда сразу стало бы ясно, что там MVC.). Теперь новая беда, суть такова. Для тестов обычно используют отдельную БД, и как это сделать в данном случае - без понятия. Додумался пока что вот до чего:

import unittest
from flask.ext.mongoengine import MongoEngine, MongoEngineSessionInterface
from neobug import neobug


class NeobugTestCase(unittest.TestCase):

    def setUp(self):
        neobug.config['TESTING'] = True
        neobug.config['MONGODB_SETTINGS'] = {'DB': 'nbtest'}
        neobug.db = MongoEngine(neobug)
        neobug.session_interface = MongoEngineSessionInterface(neobug.db)
        self.app = neobug.test_client()

    def tearDown(self):
        pass
    
if __name__ == "__main__":
    unittest.main()

Вроде как это должно переопределить БД из neobug/__init__.py, но этого не происходит. Помня о прошлом опыте, таки выкладываю ещё исходники самого neobug на github (поржёте наверное над кодом, зато может кто дельный совет не по теме даст - тоже буду благодарен).


Насколько помню, у mongoengine раннее связывание, поэтому на момент импорта все модели уже смотрят в базу из коефига, а не тестовую. Тестовый конфиг должен собираться там же где и обычный. Утром могу дать примеры.

anonymous
()
Ответ на: комментарий от kosc

Будет что-то типа такого:

neobug/__init__.py:

import sys

app = Flask(__name__, ...)

if 'neobug.test.config' in sys.modules:
    app.config.from_object(sys.modules['neobug.test.config'])
else:
    # usual config load

# app init
# db = ...
# and so on

tests/test_*:

import sys

class TestSettings:
    TESTING = True
    MONGODB_SETTINGS = {'DB': 'nbtest'}

sys.modules['neobug.test.config'] = TestSettings

# The most important thing! App import goes after
from neobug import app

...

bj
()
Ответ на: комментарий от bj

О, похоже работает! Спасибо большое!

kosc
() автор топика

Зачем тебе mongoengine, уже проблемы с ним. Монга и так достаточно проста, не накручивай вокруг нее ничего.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.