你怎么断言Django的查询集计数对模拟调用了()方法?

2024-10-02 22:28:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Mock替换Django模型,配置如下:

>>> config = {'objects.filter.return_value.count.return_value': 1}
>>> MockModel = Mock(**config)

我可以查询一些值,然后对结果调用.count()

^{pr2}$

但是,当我断言这些方法被调用时,Mock会引发一个TypeError,因为 count是Mock的一种方法call

>>> MockModel.assert_has_calls([
        call.objects.filter(foo='bar'),
        call.objects.filter().count(),
    ])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-78-bf4e954d856f> in <module>()
      1 MockModel.assert_has_calls([
      2         call.objects.filter(foo='bar'),
----> 3         call.objects.filter().count()
      4 ])

TypeError: count() takes exactly one argument (0 given)

但是,您可以看到这个调用确实存在于mock_calls

>>> MockModel.mock_calls
[
    call.trait_names(),
    call._getAttributeNames(),
    call.objects.filter(foo='bar'),
    call.objects.filter().count(),    # How do you test for this?

    ...
]

所以我的问题是:如何断言count()是在模拟Django QuerySet上调用的?在


Tags: djangoconfigreturnobjectsfoovaluecountbar