【问题标题】:Django tests: how to specify the apps whose databases I want to use?Django 测试:如何指定我要使用其数据库的应用程序?
【发布时间】:2015-08-27 12:21:33
【问题描述】:

我的默认数据库没有被迁移到 Django 的测试数据库中。正在创建一个数据库,其中包含 Django 用于记录测试的默认表(例如 django_content_typedjango_admin_log),但不是我的应用程序的表。

当我以详细级别 3 (-v 3) 运行测试时,我看到我的应用被归类为 Synchronizing apps without migrations...,这确认没有执行迁移。

但是,我不知道如何告诉 Django 的测试迁移我的应用程序的数据库表。我可以很容易地输出python manage.py makemigrations,但显然这不会延续到测试中。

我错过了什么?

谢谢!

编辑:抱歉,我的意思是没有创建关系。我想测试依赖于数据库中模型的视图。为此,我正在上传夹具(不处理生产数据)。然而,当我尝试上传一个夹具时,我得到一个relation "mymodel" does not exist 错误。

【问题讨论】:

  • 正如 vmonteco 所指出的,Django 建立了一个用于测试的并行数据库,每次都会重新构建。该数据库是使用您的 models.py 文件的当前状态创建的,除非您通过固定装置加载它,否则不会有数据,因此迁移通常是无关紧要的。您关心迁移有什么问题?
  • 啊,“迁移”可能不是正确的术语。我的意思是关系(模式)
  • 你能提供一个最小的例子来说明你的问题是什么吗?这听起来(并且@vmonteco 的更新通过指向教程的链接解决了这个问题)您不太了解 Django 如何“希望”您测试东西。我建议在测试链接中搜索术语“夹具”,以了解如何让测试数据库表具有一些初始值,以便视图从中获取内容
  • 请提供您的 models.py 和 test.py 的简化版本(以及 views.py 以确保完整性);这将使故障排除您收到该错误的原因变得更加简单

标签: python django unit-testing testing django-1.8


【解决方案1】:

Django 的测试旨在创建一个测试数据库来执行测试。

我认为让你的测试依赖于 prod 数据库是个坏主意。 您应该设计测试以涵盖尽可能多的情况,而不是检查它是否适用于您当前的数据库(可以发展)。

这里有一些关于使用 django 1.8 进行测试的页面:

https://docs.djangoproject.com/en/1.8/intro/tutorial05/

https://docs.djangoproject.com/en/1.8/topics/testing/

【讨论】:

  • 谢谢!我正在尝试测试从数据库中的表中获取对象的视图...但由于该表不存在,我无法测试该视图。
  • 您可以设计您的测试来创建一个测试表。如果您查看此处的示例:docs.djangoproject.com/en/1.8/intro/tutorial05/… 您可以看到测试旨在创建一些对象来测试具有不同情况的代码。测试后数据库将被删除。
  • 感谢 vmonteco,但表是在什么时候定义的?我尝试以类似的方式创建对象,但仍然收到 django.db.utils.ProgrammingError: relation "xxx" does not exist 错误。
  • 它们是为每个测试创建的,您在检查断言之前创建对象,但可能与您的模型有关,或者代码错误。你能按照 Foon 的建议提供一些代码吗?
猜你喜欢
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2013-11-26
  • 2011-06-04
  • 1970-01-01
  • 2023-03-31
  • 2017-05-28
相关资源
最近更新 更多