【问题标题】:Django reset_sequences doesn't work in LiveServerTestCaseDjango reset_sequences 在 LiveServerTestCase 中不起作用
【发布时间】:2015-10-15 02:01:20
【问题描述】:

我已将 django 从 1.6 更新到 1.8.3。我在单元测试中的测试 setUp 方法中创建测试模型,类似的东西

class MyTestCase(LiveServerTestCase):
    reset_sequences = True
    def setUp(self):
        self.my_model = models.MyModel.objects.create(name='test)

我在应用程序中有代码,它依赖于主键 == 1。我已经注意到,序列实际上并没有被重置。在每个下一个测试中,pk 都大于上一个。

这在 django 1.6 中工作正常,但在迁移到 1.8 后出现问题。

我应该手动重置序列吗?

附:我知道夹具,但我的模型更复杂,对我来说更容易在代码中创建模型。

【问题讨论】:

  • 你使用的是拆机方法吗?通常它用于“清理”在 setUp 方法中创建的东西。
  • 不,因为据我了解,django 将数据库回滚到 post_migration 状态。在测试中我没有看到来自其他测试的任何数据,只有单个模型,但随着 pk 的增加

标签: python django unit-testing


【解决方案1】:

问题出在 sqlite3 中。测试已使用其他设置文件运行,其中 sqlite3 配置为数据库。

django 检查数据库是否支持序列:

# django.test.testcases.py:809
def _reset_sequences(self, db_name):
    conn = connections[db_name]
    if conn.features.supports_sequence_reset:
        sql_list = conn.ops.sequence_reset_by_name_sql(
            no_style(), conn.introspection.sequence_list())
    # ....

所以我已经将测试设置切换到 postgresql,现在它可以正常工作了

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2017-10-16
    • 1970-01-01
    • 2013-06-18
    • 2013-03-21
    • 2013-02-05
    • 2014-04-25
    • 2014-05-25
    • 2013-01-19
    相关资源
    最近更新 更多