#24622: Response "context" and "templates" not available in the Test Client when
using Jinja2 - Django 1.8
-------------------------------------+------------------------------------
Reporter: rivantis | Owner: nobody
Type: Bug | Status: new
Component: Testing framework | Version: 1.8
Severity: Normal | Resolution:
Keywords: jinja2, test client | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+------------------------------------
Comment (by Roy Smith):
FWIW, here's the workaround I've been using. It monkey-patches
django.shortcuts.render to send the required signal (part of
[https://github.com/roysmith/spi-
tools/blob/5ed0cd8f2285698f31f3355b9afa55f64f19bbab/spi/test_views.py this
source file]). The downside is it doesn't get you the full template
chain, just the top-level one you call directly from your view. For my
purposes, that's (mostly) good enough, but it's certainly not a plug-
compatible replacement.
I say "mostly" because I'm now looking at a case where I need to see
included templates. Sadly, I think this approach is too complicated to
extend to support that, so I'm probably going to fall back to a low-tech
solution: having each of my jinja templates emit a HTML comment confessing
the template name and parse the generated HTML looking for those.
Django 3.1.12
Jinja 2.11.3
Python 3.7.3
{{{
from unittest.mock import patch
from django.test import TestCase
from django.test.signals import template_rendered
from django.shortcuts import render
class ViewTestCase(TestCase):
"""Base class for all SPI view tests.
Subclass this and have setUp() call super().setUp('spi.my_view')
for a view defined in my_view.py.
"""
@staticmethod
def render_patch(request, template, context):
"""Work-around for the django test client not working properly
with
jinga2 templates (https://code.djangoproject.com/ticket/24622).
"""
template_rendered.send(sender=None, template=template,
context=context)
return render(request, template, context)
def setUp(self, view_module_name):
render_patcher = patch(f'{view_module_name}.render',
autospec=True)
self.mock_render = render_patcher.start()
self.mock_render.side_effect = self.render_patch
self.addCleanup(render_patcher.stop)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/24622#comment:28>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/066.f24f5367a0b4a331408f7b3bbe43aebd%40djangoproject.com.