【问题标题】:Django test database looks empty while test is running测试运行时 Django 测试数据库看起来是空的
【发布时间】:2012-05-09 04:30:32
【问题描述】:

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

我知道表格不是空的:

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

然而,当我尝试使用pgAdmin3psql 访问数据库时,我看不到任何数据。

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

【问题讨论】:

    标签: database django testing


    【解决方案1】:

    Django 的TestCasewrapping every test in its own transaction。因此,当您通过 ORM 发出请求时,您的数据库不会被使用。

    【讨论】:

    • 谢谢。只是想确保我不会丢失它... :-)
    • 如果你想禁用事务你可以暂时继承TransactionTestCase而不是TestCase。这有点令人困惑:TestCase 继承自 TransactionTestCase,但是“但是用事务围绕每个测试,猴子修补真正的事务管理例程以什么都不做......”。这确实有效,并且对于调试非常有用。是的,我也有同样的想法,“我会失去它吗?”片刻。您想要使用 TestCase 而不是 TransactionTestCase 的原因是回滚事务比截断表更快。
    【解决方案2】:

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

    您可能只想在调试时临时执行此操作,以便在其余时间获得django.test.TestCase 的性能优势。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 2017-10-16
      • 2016-05-17
      • 2018-08-27
      • 2011-06-04
      • 2012-04-20
      • 2011-11-04
      • 2022-08-02
      相关资源
      最近更新 更多