单元测试开始崩溃,并出现django.db.utils.InterfaceError:连接已关闭
。当我切换到 Postgres 后。我在 https://www.djangoproject.com/ 找到了一些解决方案页面,但没有帮助。 .
测试用例:
class TestLogin(TestCase):
def setUp(self):
self.client = RequestsClient()
self.url = HOST + '/api/token/'
self.headers = {}
self.user = User.objects.create_user(**random_user)
def test_login_correct(self):
try:
r = self.client.post(self.url, data={
'email': random_user['email'],
'password': random_user['password']
}).json()
except JSONDecodeError:
self.fail("/api/token endpoint for POST request not implemented correctly")
self.assertTrue('access' in r)
self.assertTrue('refresh' in r)
追踪:
Traceback (most recent call last):
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 238, in _cursor
return self._prepare_cursor(self.create_cursor(name))
File "E:\Work\FarmerRest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\postgresql\base.py", line 231, in create_cursor
cursor = self.connection.cursor()
psycopg2.InterfaceError: connection already closed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "E:\Work\FarmerRest\accounts\tests\tests.py", line 141, in setUp
self.user = User.objects.create_user(**random_user)
File "E:\Work\FarmerRest\accounts\models.py", line 33, in create_user
**extra_fields)
File "E:\Work\FarmerRest\accounts\models.py", line 28, in _create_user
user.save(using=self._db)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\contrib\auth\base_user.py", line 66, in save
super().save(*args, **kwargs)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 746, in save
force_update=force_update, update_fields=update_fields)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 784, in save_base
force_update, using, update_fields,
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 887, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 926, in _do_insert
using=using, raw=raw,
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\query.py", line 1204, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1390, in execute_sql
with self.connection.cursor() as cursor:
File "E:\Work\FarmerRest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 260, in cursor
return self._cursor()
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 238, in _cursor
return self._prepare_cursor(self.create_cursor(name))
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 238, in _cursor
return self._prepare_cursor(self.create_cursor(name))
File "E:\Work\FarmerRest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\postgresql\base.py", line 231, in create_cursor
cursor = self.connection.cursor()
django.db.utils.InterfaceError: connection already closed
最佳答案
原因可能是您使用的是 TestCase
而不是 TransactionTestCase
。一旦您使用异步代码,这种情况就会很常见,从您的回溯来看似乎就是这种情况。
关于python - Django psycopg2.InterfaceError : connection already closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62996020/