应用程序.py
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"
我正在将app导入到test.py中进行单元测试。在www.example.com中调用“before_request”函数时test.py,它抛出RuntimeError:在应用程序上下文之外工作调用“input_info()”时发生相同情况
4条答案
按热度按时间mepcadol1#
Flask有一个应用程序上下文,您似乎需要执行以下操作:
您可能还可以将
app.app_context()
调用推入测试设置方法中。g9icjywg2#
svmlkihl3#
当我在使用
pytest
时遇到类似的问题时,我遵循了@brenns10的答案。我按照建议将其放入测试设置中,这是有效的:
rekjcdws4#
我使用的是python3.8,所以我不得不对已经发布的答案做一些小改动,我把下面的答案包含在pytests中,并且没有对测试文件的其他部分做任何改动。
这也可以与上下文管理器一起使用。这里要注意的主要区别是在测试文件中创建Flask应用程序,而不是从主应用程序文件导入。