Создание формы с определенными changed_data в django для целей тестирования
Я переопределил 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"]
, но мне интересно, может я что-то упускаю или есть более простой способ сделать это.
EDIT: Я тестирую кое-что другое в этом тесте, но в настоящее время это блокирует, пока я не высмею это.