gpt4 book ai didi

python - django模板中的模拟方法调用

转载 作者:行者123 更新时间:2023-12-02 06:45:51 25 4
gpt4 key购买 nike

我已经创建了Product模型的方法in_stock()。我需要在 View 和模板渲染中模拟它。

我的测试:

def test_my_view(self):
with patch.object(models.Product, 'in_stock', return_value='sldkfsdf'):
# OR with patch.object(views.Product, 'in_stock', return_value='sldkfsdf'):

response = self.client.get(reverse('my_view'))
print response.content

我的看法:

def my_view(request):
product = Product.objects.get(pk=1)
print product.in_stock()
context = RequestContext(request, {
'product': product,
})

return render_to_response('product/my_view.xml', context)

我的模板:

{{ product.in_stock }}

我在标准输出中需要什么:

sldkfsdf

在模板中:

sldkfsdf

我在标准输出中得到了什么:

sldkfsdf

在模板中:

<value, returned by original Product.in_stock() method>

因此在 my_view 中调用 Product.in_stock() 效果很好。它不仅仅适用于模板。 :( 我做错了什么?我需要在模板渲染中模拟方法什么?

我有非常旧的 Django - 1.1.1 :(

Python 2.7

模拟1.0.1

最佳答案

这与模拟对象是 MagicMock 的实例(而不仅仅是 Mock)有关。

我猜这是由于 Django 在模板中以不同的方式访问方法/属性: {{ obj.foo }} 很可能既是对象上的方法又是属性,这导致使用像 __getitem__() 这样的魔术方法。

您可以使用 patch(new=Mock, …) 创建 Mock 实例,而不是 MagicMock

关于python - django模板中的模拟方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23927861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com