Создайте форму с определенными данными changed_data в django для целей тестирования

#django #django-forms #django-testing

Вопрос:

Я переопределил ModelAdmin.save_model , чтобы запустить задачу, если было изменено определенное поле. В основном что-то вроде:

 def save_model(self, request, obj, form, change):  obj.save()  if "field_name" in form:  transaction.on_commit(lambda: trigger_task())  

Теперь я пытаюсь написать модульный тест, который проверяет, будет ли эта задача инициирована в ответ на изменение поля. Только мне трудно создать форму, которая changed_data будет содержать это поле.

Мой тест в настоящее время выглядит примерно так:

 @patch(...) def test_task_should_trigger_if_field_changed(self, mocked_task):  admin = MyAdmin(model=MyModel, admin_site=AdminSite())  form = MyForm({"field_name": "changed"}, initial={"field_name": "initial"})  ...  admin.save_model(request=MagicMock(), obj=my_model, form=form, change=False)  

Приведенный выше тест не создаст form , который changed_data содержит field_name , и задача никогда не будет запущена. На данный момент я рассматриваю возможность создания издевательского объекта, который вернет это знаменитое form.changed_data["field_name"] , но мне интересно, упускаю ли я что-то или есть более простой способ сделать это.

ПРАВКА: Я тестирую что-то еще в этом тесте, но в настоящее время это блокировщик, если я не издеваюсь над ним.