2017-05-17 5 views
0

Ich habe das folgende Modul leben unter db.db.Db, und es ist in einer Flask-Anwendung. Es verwendet die Variable app.config, um eine Verbindung zu einer Datenbank herzustellen. Wie überschreibe ich diese Einstellung, wenn ich Testfälle für Schreibeinheiten schreibe? Wie habe ich einen anderen App-Kontext mit Dummy-Konfigurationsvariablen von Flask?Flask - Unit Test mit Test App-Kontext

import psycopg2 


class Db(object): 
    def __init__(self): 
     import app 
     conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}'".format(app.app.config['DB_HOST'], \ 
         app.app.config['DB_PORT'], app.app.config['DB_NAME'], app.app.config['DB_USER'], \ 
         app.app.config['DB_PASSWORD']) 
     self.conn = psycopg2.connect(conn_string) 

    def __del__(self): 
     self.conn.close() 

Antwort

0

Ein übliches Muster ist zu create your app with a function, anstatt eine einzelne Instanz app beim Import erzeugt zu haben.

Wenn Sie nur die Datenbank in einem Anforderungskontext schlagen, können Sie flask.current_app verwenden, um auf den aktuellen App-Kontext zuzugreifen.

Zum Beispiel:

from flask import current_app 
import psycopg2 


class Db(object): 
    def __init__(self): 
     conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}'".format(current_app.config['DB_HOST'], \ 
         current_app.config['DB_PORT'], current_app.config['DB_NAME'], current_app.config['DB_USER'], \ 
         current_app.config['DB_PASSWORD']) 
     self.conn = psycopg2.connect(conn_string) 

    def __del__(self): 
     self.conn.close() 

Dann können Sie Ihre Tests jeweils ihre eigenen App, und ändern Sie die Konfigurationswerte zu, was auch immer sie wollen.