pytest / mixer Django-当从其他模型继承字段值时,fixture会忽略该字段值

时间:2019-02-14 08:39:11

标签: pytest pytest-django django-mixer

我的所有模型,包括Report都继承自BaseModel

class Report(BaseModel):
      ...

class BaseModel(models.Model):
    created_date = models.DateTimeField(auto_now_add=True, db_index=True)
    modified_date = models.DateTimeField(auto_now=True, db_index=True)

    class Meta:
        abstract = True

我正在尝试测试计划的任务,该任务将删除旧的Report对象。

以下是灯具:

@pytest.fixture(scope="function")
def old_dummy_report(request, db):
    ### set the date to far back
    old_date = datetime.datetime.now() - datetime.timedelta(days=900)
    return mixer.blend("core.report", , created_date=old_date, ios_report={'1': 1}, android_report={'1': 1})

但是,当我运行测试并检查created_date的{​​{1}}字段时,我总是得到运行测试时的日期。

除了在测试函数本身中将日期重新设置为old_dummy_report(似乎是非Python的)之外,我该如何纠正这一点。

1 个答案:

答案 0 :(得分:0)

找到了解决方案。我想这与auto_now_add=True参数有关。

我已将pytest固定装置功能更改为此:

@pytest.fixture(scope="function")
def old_dummy_report(request, db):
    old_date = datetime.datetime.now() - datetime.timedelta(days=900)
    obj = mixer.blend("core.report", ios_report={'1': 1}, android_report={'1': 3}, created_date=old_date)
    obj.created_date = old_date
    obj.save()
    return obj

因此,首先创建对象并让Django auto_now_add,然后手动更改created_date