gpt4 book ai didi

python - Flask notests - 无法连接到测试数据库

转载 作者:行者123 更新时间:2023-12-01 05:33:16 24 4
gpt4 key购买 nike

我正在制作一个简单的 Flask Web 应用程序来娱乐,我想使用 Nose 测试。我陷入了如何使用 Flask-SQLAlchemy 连接到测试文件中的内存测试数据库的困境。当我运行测试时 - Flask 连接到我的主应用程序的数据库,而且每次测试后都无法清理它。这是我的测试代码:

import nose
from nose.tools import *
from pyquery import PyQuery as pq
from flask.ext.sqlalchemy import SQLAlchemy

from app import site, db

from app.models import Post


class TestApp(object):
def setUp(self):
site.config['TESTING'] = True
site.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
self.test_app = site.test_client()
db.create_all()

def tearDown(self):
# db.session.remove()
db.drop_all()

def test_posts_index(self):
db.session.add(Post('title', 'body'))
db.session.add(Post('title2', 'body'))

db.session.commit() # this writes to production db ie app.db file
# instead of sqlite://
rv = self.test_app.get('/posts')
d = pq(rv.data)
print len(d('h1'))
assert len(d('h1')) == 2

这是我的 app/__init__.py代码:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

from app import config

site = Flask(__name__)

site.config['SQLALCHEMY_DATABASE_URI'] = config.db_uri
db = SQLAlchemy(site)
site.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'


from app import db_setup
db_setup.create_db()

import controllers, models

app/__init__.py 中的 db_setup.create_db()函数看起来就像这样:

from app import db
from app.models import Post
def create_db():
db.create_all()
db.session.commit()

我尝试在测试文件中实例化应用程序和数据库,但是我的模型不起作用,因为它们 from app import db ,其中 db 是生产数据库对象。我还在测试用例中撒了一些打印语句,例如 print db他们打印出类似 <SQLAlchemy engine sqlite://> 的内容,但它仍然会写入生产数据库。

我真的很感激任何关于如何解决这个问题的建议。谢谢!

最佳答案

为什么不使用有关环境的信息来确定应用程序是以测试模式还是实时模式启动?

if 'testing' in os.environ:
site.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
else:
site.config['SQLALCHEMY_DATABASE_URI'] = config.db_uri

给这只特殊的猫剥皮的方法有很多。如果您不喜欢让 if block 乱七八糟的代码,您可以根据应用程序是在测试模式还是实时模式下启动,从完全独立的模块导入您的设置。

关于python - Flask notests - 无法连接到测试数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19701071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com