我是不是在Django测试中嘲笑了这个助手函数?

2024-10-02 12:25:17 发布

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

库.py

from django.core.urlresolvers import reverse
def render_reverse(f, kwargs):
    """
    kwargs is a dictionary, usually of the form {'args': [cbid]}
    """
    return reverse(f, **kwargs)

测试.py

^{pr2}$

但是,我得到了

  File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/core/urlresolvers.py", line 296, in reverse
    "arguments '%s' not found." % (lookup_view_s, args, kwargs))
NoReverseMatch: Reverse for 'dummy_readfile' with arguments '('123',)' and keyword arguments '{}' not found.

为什么它调用reverse而不是我的mock_reverse(它正在查找我的网址.py!!) 您可以看到calls返回一个空列表。我甚至assert mock_reverse.called并且返回false。在

也许我没有提到,但是lib只是一堆函数,没有类。在


Tags: djangofrompycoreimportlibnotargs
2条回答

有两件事。1您需要从Django修补reverse。2您需要在上下文管理器中进行导入,以使lib模块导入被模拟reverse。在

from lib import print_ls

class LibTest(unittest.TestCase):

    def test_render_reverse_is_correct(self):
        with patch('django.core.urlresolvers.reverse') as mock_reverse:
            from lib import render_reverse
            mock_f = MagicMock(name='f', return_value='dummy_view')
            mock_kwargs = MagicMock(name='kwargs',return_value={'args':['123']})
            mock_reverse.return_value = '/natrium/cb/details/123'
            response = render_reverse(mock_f, mock_kwargs)

        self.assertTrue('/natrium/cb/details/' in response)

您没有传递任何关键字参数(字典),而是传递位置参数(元组)。在

此外,要反转的代理方法只传递关键字参数,而不传递位置参数。在

最后,您没有与请求的模式相匹配的URL,因为您没有传递任何关键字参数,只有位置参数。在

相关问题 更多 >

    热门问题