DRF-сериализатор высмеиваемого объекта возвращает объект Mock для атрибутов
Я пишу тест pytest и хочу подражать несуществующей модели, которая имеет вложенные под-объекты со своими значениями. Когда я затем сериализую высмеиваемый объект, данные возвращают другой высмеиваемый объект вместо значения для высмеиваемого объекта.
def sub_object(status):
sub-object_mock = mock.MagicMock()
sub-object.status = status
sub-object.user = UserFactory()
sub-object.created = timezone.now()
return sub-object_mock
@pytest.fixture
def object_with_sub_object():
object_with_sub-object = mock.MagicMock()
sub_object_1 = sub_object("new")
sub_object_2 = sub_object("declined")
object_with_sub_object.sub_object = [sub_object_1, sub_object_2]
return object_with_history
@pytest.mark.django_db
def test_status_serializer_mixin(object_with_sub_object):
output = StatusSerializerMixin(object_with_sub_object.sub_object[0]).data
Проверка object_with_sub_object.sub_object[0].status
дает new
, но StatusSerializerMixin(object_with_sub_object.sub_object[0]).data["status"]
дает '<MagicMock name=\'mock.status_.status\' id=\'139783810861768\'>'
Если заменить sub-object.status = status
на sub-object.status = mock.PropertyMock(return_value=status)
, то object_with_sub_object.sub_object[0].status
даст <PropertyMock name='mock.status' id='139783815428640'>
.
Любая помощь в написании вложенных подражаний будет принята с благодарностью.
Поскольку data['status']
содержит '<MagicMock name=\'mock.status_.status\' id=\'139783810861768\'>
, доступ сериализатора: sub-object.status_.status
,
поэтому вы должны написать:
def sub_object(status):
sub-object_mock = mock.MagicMock()
status-object_mock = mock.MagicMock()
sub-object_mock.status_ = status-object_mock
status-object_mock.status = status
sub-object_mock.user = UserFactory()
sub-object_mock.created = timezone.now()
return sub-object_mock
Если это не то поведение, которое вы ожидали, вам нужно исправить ваш сериализатор (вы должны предоставить код сериализатора в вопросе).