17
app.pyRuntime: Arbeiten außerhalb des Anwendungskontext
from flask import Flask, render_template, request,jsonify,json,g
import mysql.connector
app = Flask(__name__)
**class TestMySQL():**
@app.before_request
def before_request():
try:
g.db = mysql.connector.connect(user='root', password='root', database='mysql')
except mysql.connector.errors.Error as err:
resp = jsonify({'status': 500, 'error': "Error:{}".format(err)})
resp.status_code = 500
return resp
@app.route('/')
def input_info(self):
try:
cursor = g.db.cursor()
cursor.execute ('CREATE TABLE IF NOT EXISTS testmysql (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(40) NOT NULL, \
email VARCHAR(40) NOT NULL UNIQUE)')
cursor.close()
test.py
from app import *
class Test(unittest.TestCase):
def test_connection1(self):
with patch('__main__.mysql.connector.connect') as mock_mysql_connector_connect:
object=TestMySQL()
object.before_request() """Runtime error on calling this"
I App in test.py für Einheit testing.On Berufung am Import 'before_request' Funktion in test.py, es wirft RuntimeError: außerhalb des Anwendungskontexts arbeiten gleiche geschieht auf ‚input_info()‘
danke @ brenns10 es hat funktioniert – guri
@ brenns10 kannst du bitte mehr darüber erzählen? Warum passiert das? – aks
@aks Die verlinkte Seite hat wahrscheinlich eine bessere Erklärung, als ich geben könnte. Grundsätzlich, wie Flask entworfen ist, sollte Code auf eine globale Variable zugreifen können, die das aktuelle Flask-App-Objekt enthält, aber (2) mehrere Anwendungen könnten in einem einzigen Prozess existieren. Flask verwaltet dies, indem er einige Variablen vor der Bearbeitung einer Anfrage einrichtet. Wenn Sie jedoch testen, müssen Sie den "Anwendungskontext" selbst einrichten, damit Ihr Code die richtigen globalen Variablen finden kann. – brenns10