1
0
mirror of https://github.com/django/django.git synced 2025-03-28 18:20:49 +00:00

Fixed #27019 -- Made teardown_test_environment() restore the old DEBUG.

This commit is contained in:
Chris Jerdonek 2016-08-08 03:04:27 -07:00 committed by Tim Graham
parent a757c68129
commit 7f9fd42b93
3 changed files with 24 additions and 6 deletions

View File

@ -9,7 +9,6 @@ import textwrap
import unittest import unittest
from importlib import import_module from importlib import import_module
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import DEFAULT_DB_ALIAS, connections from django.db import DEFAULT_DB_ALIAS, connections
from django.test import SimpleTestCase, TestCase from django.test import SimpleTestCase, TestCase
@ -413,8 +412,7 @@ class DiscoverRunner(object):
) )
def setup_test_environment(self, **kwargs): def setup_test_environment(self, **kwargs):
setup_test_environment() setup_test_environment(debug=self.debug_mode)
settings.DEBUG = self.debug_mode
unittest.installHandler() unittest.installHandler()
def build_suite(self, test_labels=None, extra_tests=None, **kwargs): def build_suite(self, test_labels=None, extra_tests=None, **kwargs):

View File

@ -94,18 +94,28 @@ def instrumented_test_render(self, context):
return self.nodelist.render(context) return self.nodelist.render(context)
def setup_test_environment(): class _SavedSettings(object):
pass
def setup_test_environment(debug=None):
""" """
Perform global pre-test setup, such as installing the instrumented template Perform global pre-test setup, such as installing the instrumented template
renderer and setting the email backend to the locmem email backend. renderer and setting the email backend to the locmem email backend.
""" """
if hasattr(Template, '_original_render'): if hasattr(_SavedSettings, 'debug'):
# Executing this function twice would overwrite the saved values. # Executing this function twice would overwrite the saved values.
raise RuntimeError( raise RuntimeError(
"setup_test_environment() was already called and can't be called " "setup_test_environment() was already called and can't be called "
"again without first calling teardown_test_environment()." "again without first calling teardown_test_environment()."
) )
if debug is None:
debug = settings.DEBUG
_SavedSettings.debug = settings.DEBUG
settings.DEBUG = debug
Template._original_render = Template._render Template._original_render = Template._render
Template._render = instrumented_test_render Template._render = instrumented_test_render
@ -129,6 +139,9 @@ def teardown_test_environment():
Perform any global post-test teardown, such as restoring the original Perform any global post-test teardown, such as restoring the original
template renderer and restoring the email sending functions. template renderer and restoring the email sending functions.
""" """
settings.DEBUG = _SavedSettings.debug
del _SavedSettings.debug
Template._render = Template._original_render Template._render = Template._original_render
del Template._original_render del Template._original_render

View File

@ -612,11 +612,18 @@ Testing utilities
To assist in the creation of your own test runner, Django provides a number of To assist in the creation of your own test runner, Django provides a number of
utility methods in the ``django.test.utils`` module. utility methods in the ``django.test.utils`` module.
.. function:: setup_test_environment() .. function:: setup_test_environment(debug=None)
Performs global pre-test setup, such as installing instrumentation for the Performs global pre-test setup, such as installing instrumentation for the
template rendering system and setting up the dummy email outbox. template rendering system and setting up the dummy email outbox.
If ``debug`` isn't ``None``, the :setting:`DEBUG` setting is updated to its
value.
.. versionchanged:: 1.11
The ``debug`` argument was added.
.. function:: teardown_test_environment() .. function:: teardown_test_environment()
Performs global post-test teardown, such as removing instrumentation from Performs global post-test teardown, such as removing instrumentation from