From 7f9fd42b9316e4beddb690bae61940e940281805 Mon Sep 17 00:00:00 2001 From: Chris Jerdonek Date: Mon, 8 Aug 2016 03:04:27 -0700 Subject: [PATCH] Fixed #27019 -- Made teardown_test_environment() restore the old DEBUG. --- django/test/runner.py | 4 +--- django/test/utils.py | 17 +++++++++++++++-- docs/topics/testing/advanced.txt | 9 ++++++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/django/test/runner.py b/django/test/runner.py index 179b434713e..f0df68fe685 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 57ae46fe1c2..7b27da11428 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 5b09bd33f3e..72a8c7276cf 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