Fixed #27032 -- Prevented setup_test_environment() from being called twice.

This commit is contained in:
Chris Jerdonek 2016-08-08 02:38:10 -07:00 committed by Tim Graham
parent a7863c78b7
commit e7fb724cd2
3 changed files with 20 additions and 0 deletions

View File

@ -99,6 +99,13 @@ def setup_test_environment():
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'):
# 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()."
)
Template._original_render = Template._render
Template._render = instrumented_test_render

View File

@ -364,6 +364,11 @@ Miscellaneous
:meth:`~django.db.models.fields.related.RelatedManager.set` now
clear the ``prefetch_related()`` cache.
* To prevent possible loss of saved settings,
:func:`~django.test.utils.setup_test_environment` now raises an exception if
called a second time before calling
:func:`~django.test.utils.teardown_test_environment`.
.. _deprecated-features-1.11:
Features deprecated in 1.11

View File

@ -20,6 +20,7 @@ from django.test import (
from django.test.html import HTMLParseError, parse_html
from django.test.utils import (
CaptureQueriesContext, isolate_apps, override_settings,
setup_test_environment,
)
from django.urls import NoReverseMatch, reverse
from django.utils import six
@ -864,6 +865,13 @@ class SecondUrls:
urlpatterns = [url(r'second/$', empty_response, name='second')]
class SetupTestEnvironmentTests(SimpleTestCase):
def test_setup_test_environment_calling_more_than_once(self):
with self.assertRaisesMessage(RuntimeError, "setup_test_environment() was already called"):
setup_test_environment()
class OverrideSettingsTests(SimpleTestCase):
# #21518 -- If neither override_settings nor a setting_changed receiver