为什么 Django 测试数据库在测试运行时看起来是空的?

问题描述 投票:0回答:2

我有一个使用本地 PostgreSQL 服务器的 Django 项目。 我正在使用调试器来调试我遇到的一些奇怪的错误。当调试器在其中一项测试中停止时,我尝试查看测试数据库。我看到这个新数据库(test_project1)并且所有方案都按其应有的方式定义。但所有桌子都是空的。

我知道桌子不是空的:

  • 我使用了一个夹具,一些测试已经运行并返回了数据。
  • 后期测试创建了一个新用户并返回了 201 状态代码。

然而,当我尝试使用

pgAdmin3
psql
访问数据库时,我看不到任何数据。

知道这是怎么回事吗? Django 使用某种复杂的缓存机制吗?

database django testing
2个回答
21
投票

Django 的

TestCase
将每个测试包装在自己的事务中。因此,每当您通过 ORM 发出请求时,您的数据库都不会被使用。


3
投票

可以通过继承

django.test.TestCase
而不是
django.test.TransactionTestCase
来避免
TestCase
正在使用的数据库事务。 然后数据将在数据库中可见。

您可能只想在调试时暂时执行此操作,以便在其余时间获得

django.test.TestCase
的性能优势。

Django 文档:
django.test.TransactionTestCase
django.test.TestCase

© www.soinside.com 2019 - 2024. All rights reserved.