无法在Django测试类中加载对象

时间:2019-04-11 10:00:25

标签: django testing

在测试类中,我想获取给定类型的所有对象;这总是给一个空集:

from Dictionnaire.models import Entree

class Test(TestCase):
    def setUp(self):
    ...
    Q=Entree.objects.all()
    print(Q.count())  <------always get 0.

为什么?

2 个答案:

答案 0 :(得分:1)

运行测试的想法是每次运行测试时都具有可重现的情况。因此,TestCase每次初始化时都会创建一个新的空数据库,方法是先运行所有迁移。这样,您可以确保每次运行测试时都遇到相同的情况。

因此,TestCase不使用您的开发数据库,​​也不使用您的开发服务器(runserver)。它完全在自己的“世界”中运行。

如果要确保在运行测试时数据库中有一些数据,请覆盖类方法setUpTestData(),这比在setUp()中进行每个测试都要快。

答案 1 :(得分:0)

您可以将数据库转储到夹具中,然后从测试数据库中加载它:

  

夹具是Django知道如何导入到的数据的集合   数据库。创建灯具的最直接方法是   您已经有一些数据可以使用manage.py dumpdata命令

     

夹具可以用JSON,XML或YAML编写(已安装PyYAML)   文档。

     

加载数据非常容易:只需调用manage.py loaddata <fixturename>,   您创建的夹具文件的名称在哪里

然后从SetUp()中的test.py

from django.core.management import call_command
call_command("loaddata", "' + 'fixturefile.json' + '",
verbosity=0)

但是,为了使您的测试数据库与生产数据库保持最新(我不建议这样做),您必须设置cron作业或其他内容。

来源:

https://stackoverflow.com/a/48737566/5094841

https://django-testing-docs.readthedocs.io/en/latest/fixtures.html