无法模拟正在遍历for循环的django查询对象

时间:2019-05-03 12:16:11

标签: django python-3.x django-models mocking

我试图在遍历for循环时模拟django查询对象。

  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 :(得分:0)

您已经关闭。而不是将return_value分配给Mock(这是错误消息所指出的不可迭代的),您需要将模拟包装为可迭代的,例如listtuple

 @mock.patch('myapp.models.MyModel.objects')
   def test_myMethod(self, mock_MyModel):
     mock_queryset = Mock()
     mock_MyModel.filter.return_value = [mock_queryset]