我正在为使用rethinkdb后端的flask应用程序编写单元测试。在每个请求之前和之后打开和关闭新连接,如下所示:
@app.before_request
def before_request():
ARGS = settings.RETHINKDB_ARGS
try:
g.rdb_conn = rethinkdb.connect(host=ARGS['host'],
port=ARGS['port'],
db=ARGS['db'])
except RqlDriverError:
abort(503, "Database connection could be established.")
@app.teardown_request
def teardown_request(exception):
try:
g.rdb_conn.close()
except AttributeError:
pass
我正在为每个测试创建数据库记录
def setUp(self):
self.app = current_app.test_client()
self.user = User.create({
'email': 'a@a.com',
'first_name': 'a',
'last_name': 'a',
'role': 'user',
'status': 'active'
})
User.create基本上是在调用
r.table('user').insert(data).run(g.rdb_conn)
我的测试功能:
def test_get(self):
url = url_for('api.get_user', **{'id': self.user.data.id})
retval = ujson.loads(self.app.get(url).data)
...
def test_get2(self):
...
当测试运行时,会发生以下情况:
如何在每次测试运行时阻止连接覆盖彼此?
答案 0 :(得分:0)
显然,我的问题与rethinkdb没有直接关系,但是每次请求完成时都会被覆盖的flask全局变量被覆盖。
我用模拟库解决了它。
from mock import patch
...
rdb_conn = rethinkdb.connect(...)
class Test(unittest.TestCase):
...
@patch('flask.g.rdb_conn', rdb_conn)
def setUp(self):
functions that depend on g.rdb_conn...