当测试运行时,Django测试数据库看起来是空的

Uzi*_*Uzi 11 database testing django

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

我知道表格不是空的: - 我使用了夹具,一些测试已经运行并返回数据. - 后测试创建新用户返回201状态代码.

然而,当我尝试使用pgAdmin3或psql访问数据库时,我看不到任何数据.

知道这里发生了什么吗?Django是否使用某种复杂的现金机制?

ilv*_*var 13

Django的TestCase包裹在自己的事务每个测试.因此,只要您通过ORM执行请求,就不会使用您的数据库.

  • 如果要禁用事务,可以暂时从TransactionTestCase而不是TestCase继承.这有点令人困惑:TestCase继承自TransactionTestCase,但是"但是用一个事务围绕每个测试,猴子修补真正的事务管理例程什么都不做......".这确实有效,并且对调试非常有用.是的,我也一样,"我输了吗?" 时刻.您希望使用TestCase而不是TransactionTestCase的原因是回滚事务比截断表更快. (7认同)