如何使模拟对象可迭代['TypeError:'Mock'对象不可迭代']需要模拟正在遍历for循环的django查询

时间:2019-05-06 19:30:45

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

我正在尝试模拟下面的Django查询对象:

1.) if MyModel.objects.filter(data='some_data').exists():
then 2.) for row in MyModel.objects.filter(ListId=id):

我正在尝试在我的方法中的Django查询下面进行测试。

def my_method(some_parameter):
 if formsList.objects.filter(data=some_data).exists():
    for item in formsList.objects.filter(data1='data1',data2='data2'):
        formNameInDb = (item.fileId).formName
        if formNameInDb == formName:
            return True

下面是我的方法:

@mock.patch('MyModel.objects')  
def test_checkCombinationOfStateAndProduct(self, formsList_mock):

    formsList_mock_data = mock.MagicMock(spec=MyModel)
    formsList_mock_data.fileId.formName ='test data'

    formsList_queryset = Mock()
    formsList_mock.filter.return_value = formsList_queryset

    # formsList_mock.filter.return_value = [formsList_queryset] 

    formsList_queryset.exists.return_value = True

对于查询1)。     就像我能够模拟如果formsList.objects.filter(data = some_data).exists()

但再次查询 2)for formList.objects.filter(data1 ='data1',data2 ='data2')中的项目:     我收到模拟对象(formsList_queryset)应该可迭代 因此,如果我像这样 [formsList_queryset] 使其可迭代。

然后我收到错误消息” AttributeError:'list'对象没有属性'exists'

我想这是因为在使模拟对象可迭代之后,它的行为类似于列表,因此它不具有exist属性。

我的问题是我无法使模拟对象(formsList_queryset)可迭代,因此它无法在上述两个查询中使用。

还有其他方法可以模拟两个查询来解决此问题。

任何人都可以帮助解决链查询。任何帮助或领导,我将不胜感激。 请让我知道是否需要任何信息。

0 个答案:

没有答案