Невозможно смоделировать объект запроса django, который выполняет цикл for - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь смоделировать объект запроса django, повторяя цикл for.

  for row in MyModel.objects.filter(ListId=id):

Я получаю 'TypeError:' Mock 'объект не повторяется'

Ниже мой подход

    MyModel_mock_data = mock.MagicMock(spec=MyModel)
    MyModel_mock_data.state='x',
    MyModel_mock_data.product='y',
    MyModel_mock_data.type='z',
    MyModel_mock_data.effectiveDate='2019-04-10'

    MyModel_queryset = Mock()
    MyModel_mock.filter.return_value = MyModel_queryset
    MyModel_mock.exists.return_value = True

Я пытаюсь проверить ниже запрос django внутри моего метода.

if MyModel.objects.filter(
    state=state,
    product=product,
    type=FormType,
    effectiveDate=effectiveDate
).exists():

    print("before for >>>>>>>>>>>>>>>>", MyModel.objects.filter(
    state=state,
    product=product,
    type=FormType,
    effectiveDate=effectiveDate
).exists())
    for item in MyModel.objects.filter(
        state=state,
        product=product,
        type=FormType,
        effectiveDate=effectiveDate
    ):
        print("inside for >>>>>>>>>>>>>>>>", item)
        formNameInDb = (item.fileId).formName
        print("formNameInDb>>>>>>>>>>>", formNameInDb)
        # formName already exist in DB
        if formNameInDb == formName:
            return True

Может кто-нибудь помочь решить цепочку запросов. Любая помощь или руководство, я буду очень признателен. Пожалуйста, дайте мне знать, если требуется какая-либо информация.

1 Ответ

0 голосов
/ 03 мая 2019

Ты рядом. Вместо присвоения return_value макету (который, как говорится в сообщении об ошибке, не повторяется), вам нужно обернуть макет в итерацию, например, list или tuple:

 @mock.patch('myapp.models.MyModel.objects')
   def test_myMethod(self, mock_MyModel):
     mock_queryset = Mock()
     mock_MyModel.filter.return_value = [mock_queryset]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...