summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2016-08-08 03:04:27 -0700
committerTim Graham <timograham@gmail.com>2016-08-10 16:24:41 -0400
commit7f9fd42b9316e4beddb690bae61940e940281805 (patch)
treec100a4767cd3ce9503e29d57685e0fa3b8ef3298
parenta757c68129fe5b416c6a71a5401f90e3208bae99 (diff)
Fixed #27019 -- Made teardown_test_environment() restore the old DEBUG.
-rw-r--r--django/test/runner.py4
-rw-r--r--django/test/utils.py17
-rw-r--r--docs/topics/testing/advanced.txt9
3 files changed, 24 insertions, 6 deletions
diff --git a/django/test/runner.py b/django/test/runner.py
index 179b434713..f0df68fe68 100644
--- a/django/test/runner.py
+++ b/django/test/runner.py
@@ -9,7 +9,6 @@ import textwrap
import unittest
from importlib import import_module
-from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.db import DEFAULT_DB_ALIAS, connections
from django.test import SimpleTestCase, TestCase
@@ -413,8 +412,7 @@ class DiscoverRunner(object):
)
def setup_test_environment(self, **kwargs):
- setup_test_environment()
- settings.DEBUG = self.debug_mode
+ setup_test_environment(debug=self.debug_mode)
unittest.installHandler()
def build_suite(self, test_labels=None, extra_tests=None, **kwargs):
diff --git a/django/test/utils.py b/django/test/utils.py
index 57ae46fe1c..7b27da1142 100644
--- a/django/test/utils.py
+++ b/django/test/utils.py
@@ -94,18 +94,28 @@ def instrumented_test_render(self, 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
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.
raise RuntimeError(
"setup_test_environment() was already called and can't be called "
"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._render = instrumented_test_render
@@ -129,6 +139,9 @@ def teardown_test_environment():
Perform any global post-test teardown, such as restoring the original
template renderer and restoring the email sending functions.
"""
+ settings.DEBUG = _SavedSettings.debug
+ del _SavedSettings.debug
+
Template._render = Template._original_render
del Template._original_render
diff --git a/docs/topics/testing/advanced.txt b/docs/topics/testing/advanced.txt
index 5b09bd33f3..72a8c7276c 100644
--- a/docs/topics/testing/advanced.txt
+++ b/docs/topics/testing/advanced.txt
@@ -612,11 +612,18 @@ Testing utilities
To assist in the creation of your own test runner, Django provides a number of
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
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()
Performs global post-test teardown, such as removing instrumentation from