Django夹具的创建,忽略了对象之间的关系

时间:2018-05-08 18:32:22

标签: django testing python-3.6

我在django应用中测试视图。模型(用户,部门,报告等)之间存在很多OneToMany和ManyToMany关系。在创建我根本不使用的夹具时,需要花费大量时间来填充某些字段,如姓名,姓氏出生日期等。我怎么能忽略它们呢?还有什么是创建夹具时的最佳实践?我喜欢这样的

class TestReportModel(TestCase):
allow_database_queries = True

@classmethod
def setUpTestData(cls):
    cls.report_id = 99
    cls.factory = RequestFactory()

    cls.user_with_access = User.objects.create(username="user1", password="password")
    cls.employee = Employee.objects.create(user=cls.user_with_access, fio="name1 surname1",
                                           date_of_birth="2012-12-12")
    cls.indicator = Indicator.objects.create(context_id=10, set_id=10)
    cls.ife = IndicatorsForEmployees.objects.create(employee=cls.employee, indicator=cls.indicator)
    cls.report = Report.objects.create(owner=cls.ife)
    cls.report.id = cls.report_id
    cls.report.save()

    cls.user_with_no_access = User.objects.create(username="user_with_no_access", password="password")
    cls.employee_with_no_access = Employee.objects.create(user=cls.user_with_no_access, fio="name2 surname2",
                                                          date_of_birth="2018-12-12")

1 个答案:

答案 0 :(得分:0)

听起来您需要在设置文件中指定测试数据库,使用syncdb加载fixture,然后使用keepdb标志。

在您的设置文件中,您可以在数据库中指定测试数据库名称。 https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-DATABASE-TEST

如果找不到此数据库,则在运行测试时将创建该数据库。创建fixture后,可以使用syncdb加载该db。 https://code.djangoproject.com/wiki/Fixtures#Fixtures

然后,当您运行单元测试时,将--keepdb与它一起传递,数据库将在测试之间保持不变。 https://docs.djangoproject.com/en/2.0/ref/django-admin/#cmdoption-test-keepdb