2017-08-12 65 views
0

我在app/__init__.py簡單create_app功能:訪問蒙戈實例測試

from flask import Flask 
from flask_bootstrap import Bootstrap 
from flask_login import LoginManager 
from flask_pymongo import PyMongo 
from .user_management import User 

from config import app_config 

login_manager = LoginManager() 

mongo = PyMongo() 

.... 

def create_app(config): 
    app = Flask(__name__, instance_relative_config=True, static_folder='static') 
    login_manager.init_app(app) 
    login_manager.login_message = 'You must be logged in to view this page' 
    login_manager.login_view = 'auth.login' 

    Bootstrap(app) 
    app.config.from_object(app_config[config]) 
    app.config.from_pyfile('config.py') 

    if app.testing: 
     mongo.init_app(app, config_prefix='MONGO2') 
    else: 
     mongo.init_app(app) 

    .... 

    return app 

而且我的配置:

class Config(): 
    DEBUG = False 
    MONGO_HOST = 'localhost' 
    MONGO_PORT = 27017 
    .... 


class DevelopmentConfig(Config): 
    DEBUG = True 
    DEVELOPMENT = True 


class TestingConfig(Config): 
    TESTING = True 
    DEBUG = False 
    CSRF_ENABLED = False 
    MONGO2_DBNAME = 'test' 
.... 

app_config = { 
    'testing': TestingConfig, 
    'development': DevelopmentConfig, 
    'production': ProductionConfig 
} 

整個應用程序,我從這個文件中所作導入蒙戈實例在整個應用程序中使用它。但是,我無法找到一個查找設置使用「測試」數據庫,但不使用的應用程序上下文創建新蒙戈實例,因爲我在這裏做

我的單元測試文件看起來像這樣。

from app import create_app 
import unittest 

from app import mongo 

class TestCase(unittest.TestCase): 
    def setUp(self): 
     app = create_app('testing') 
     self.app = app 

    def tearDown(self): 
     pass 

    def test_mongo(self): 
     with self.app.app_context(): 
      assert mongo.db.name == 'test' 

if __name__ == '__main__': 
    unittest.main() 

這似乎並不像是要走的路。這也使得不可能使用app.test_client()。在燒瓶測試設置中實例化測試數據庫的正確方法是什麼?

回答

0

我不知道怎麼做,通過配置文件,但我有另一種方法您可能會感興趣。

當我已創建單元測試,以我的瓶/蒙戈的應用程序,我只是單純的閱讀sys.args(在我的「__init__.py」),並從那裏決定,如果我想使用的測試數據庫或實際的DB,像這樣:

if "__init__.py" == sys.argv[0]: 
    db = LoginManager() 
else: 
    db = TestDB() # if running unit tests 

我不知道這是最可靠的方法與單元測試工作,但它肯定是超級簡單的方法來做到這一點,並做這項工作。

如果您對整個設置感興趣,請查看我的example app