御坂網路司令塔

偉大光榮正確的中土國民會萬歲

Django Q + psycopg2cffi 单元测试踩坑记

可能是出于防止连接丢失的原因,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 之类的,并没有用。