微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 pytest 失败输出中查看 django 模板

如何解决在 pytest 失败输出中查看 django 模板

在渲染 Django 模板期间,我基于 pytest 的测试失败。

我想看到两件事:模板的名称,以及导致此异常的部分的片段。

也许我瞎了,但我看不到:

tests/magic/test_render_search.py:8 (test_render_foo_search_results)
    @pytest.mark.django_db
    def test_render_foo_search_results():
        portal = PortalFactory.create()
        foo = fooFactory.create(name='dummy')
        foo_index.sync_foo(foo.id)
        foo_index.commit()
>       html = render_foo_search_results('name=dummy',portal=portal)

test_render_search.py:16: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../magic/templatetags/render_search.py:17: in render_foo_search_results
    return get_foo_search_results_context(
../../magic/render_util.py:62: in get_foo_search_results_context
    html_data = cached_foo_render(search_results,../../magic/render_util.py:41: in cached_foo_render
    rendered = render_to_string(template,{
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/loader.py:62: in render_to_string
    return template.render(context,request)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/backends/django.py:61: in render
    return self.template.render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/base.py:171: in render
    return self._render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/test/utils.py:96: in instrumented_test_render
    return self.nodelist.render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/base.py:937: in render
    bit = node.render_annotated(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/base.py:904: in render_annotated
    return self.render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/defaulttags.py:443: in render
    url = reverse(view_name,args=args,kwargs=kwargs,current_app=current_app)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/urls/base.py:90: in reverse
    return iri_to_uri(resolver._reverse_with_prefix(view,prefix,*args,**kwargs))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <URLResolver 'mycomp.urls' (None:None) '^/'>
lookup_view = 'hydra.foo_detail',_prefix = '/'
args = ('','dummy-tecklenburg---26'),kwargs = {}
possibilities = [([('foo/%(bar_nick)s/%(slug)s/',['bar_nick','slug']),('foo/%(bar_nick)s/%(slug)s-%(variant_version)s/'... 'slug','variant_version'])],'foo/(?P<bar_nick>[^/]+)/(?P<slug>[^/]+?)(?:-(?P<variant_version>\\w))?/$',{},{})]
possibility = [('foo/%(bar_nick)s/%(slug)s/',('foo/%(bar_nick)s/%(slug)s-%(variant_version)s/','slug','variant_version'])]
pattern = 'foo/(?P<bar_nick>[^/]+)/(?P<slug>[^/]+?)(?:-(?P<variant_version>\\w))?/$'
defaults = {},converters = {}
result = 'foo/%(bar_nick)s/%(slug)s-%(variant_version)s/'
params = ['bar_nick','variant_version']
candidate_subs = {'bar_nick': '','slug': 'dummy-tecklenburg---26'}
text_candidate_subs = {'bar_nick': '','slug': 'dummy-tecklenburg---26'}
k = 'slug'

    def _reverse_with_prefix(self,lookup_view,_prefix,**kwargs):
        if args and kwargs:
            raise ValueError("Don't mix *args and **kwargs in call to reverse()!")
    
        if not self._populated:
            self._populate()
    
        possibilities = self.reverse_dict.getlist(lookup_view)
    
        for possibility,pattern,defaults,converters in possibilities:
            for result,params in possibility:
                if args:
                    if len(args) != len(params):
                        continue
                    candidate_subs = dict(zip(params,args))
                else:
                    if set(kwargs).symmetric_difference(params).difference(defaults):
                        continue
                    if any(kwargs.get(k,v) != v for k,v in defaults.items()):
                        continue
                    candidate_subs = kwargs
                # Convert the candidate subs to text using Converter.to_url().
                text_candidate_subs = {}
                for k,v in candidate_subs.items():
                    if k in converters:
                        text_candidate_subs[k] = converters[k].to_url(v)
                    else:
                        text_candidate_subs[k] = str(v)
                # Wsgi provides decoded URLs,without %xx escapes,and the URL
                # resolver operates on such URLs. First substitute arguments
                # without quoting to build a decoded URL and look for a match.
                # Then,if we have a match,redo the substitution with quoted
                # arguments in order to return a properly encoded URL.
                candidate_pat = _prefix.replace('%','%%') + result
                if re.search('^%s%s' % (re.escape(_prefix),pattern),candidate_pat % text_candidate_subs):
                    # safe characters from `pchar` deFinition of RFC 3986
                    url = quote(candidate_pat % text_candidate_subs,safe=RFC3986_SUBDELims + '/~:@')
                    # Don't allow construction of scheme relative urls.
                    return escape_leading_slashes(url)
        # lookup_view can be URL name or callable,but callables are not
        # friendly in error messages.
        m = getattr(lookup_view,'__module__',None)
        n = getattr(lookup_view,'__name__',None)
        if m is not None and n is not None:
            lookup_view_s = "%s.%s" % (m,n)
        else:
            lookup_view_s = lookup_view
    
        patterns = [pattern for (_,_,_) in possibilities]
        if patterns:
            if args:
                arg_msg = "arguments '%s'" % (args,)
            elif kwargs:
                arg_msg = "keyword arguments '%s'" % (kwargs,)
            else:
                arg_msg = "no arguments"
            msg = (
                "Reverse for '%s' with %s not found. %d pattern(s) tried: %s" %
                (lookup_view_s,arg_msg,len(patterns),patterns)
            )
        else:
            msg = (
                "Reverse for '%(view)s' not found. '%(view)s' is not "
                "a valid view function or pattern name." % {'view': lookup_view_s}
            )
>       raise noreverseMatch(msg)
E       django.urls.exceptions.noreverseMatch: Reverse for 'hydra.foo_detail' with arguments '('','dummy-tecklenburg---26')' not found. 1 pattern(s) tried: ['foo/(?P<bar_nick>[^/]+)/(?P<slug>[^/]+?)(?:-(?P<variant_version>\\w))?/$']

../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/urls/resolvers.py:673: noreverseMatch

有没有办法让 pytest 向我显示模板名称和模板中导致此异常的行?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。