pytest / mixer Django - прибор игнорирует значение поля, если оно унаследовано от другой модели - PullRequest
0 голосов
/ 14 февраля 2019

Все мои модели, включая 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 для old_dummy_report, я всегда получаю дату в то время, когда тестзапустить.

Как это исправить, кроме переустановки даты на old_date в самой тестовой функции (которая кажется непифонической).

1 Ответ

0 голосов
/ 14 февраля 2019

Нашел решение.Я предполагаю, что это связано с параметром 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 вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...