可能是出于防止连接丢失的原因,Django Q 项目在 cluster.py
文件中大量应用了 db.close_old_connections()
,关闭并重新打开数据库连接。而在 Django 自带的单元测试 django.test.TestCase
中,是采用了数据库事务进行测试数据回滚,以实现测试之间互相隔离的目的;在此时关闭数据库连接,就会使得事务中断,抛出异常——在 psycopg2 中,会说 InterfaceError("connection already closed")
,而在 psycopg2cffi 中,会说 TransactionManagementError("An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block
。
之前查到几个说法,关于 TestCase 改成 TransactionTestCase 之类的,并没有用。