Skip to content

Commit 34ad0bc

Browse files
committed
Merge branch 'clean_up_urls_cache'
2 parents f1711f0 + fea9c44 commit 34ad0bc

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

pytest_django/plugin.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ def _django_set_urlconf(request):
339339
if marker:
340340
skip_if_no_django()
341341
import django.conf
342-
from django.core.urlresolvers import clear_url_caches
342+
from django.core.urlresolvers import clear_url_caches, set_urlconf
343343

344344
validate_urls(marker)
345345
original_urlconf = django.conf.settings.ROOT_URLCONF
@@ -348,6 +348,10 @@ def _django_set_urlconf(request):
348348

349349
def restore():
350350
django.conf.settings.ROOT_URLCONF = original_urlconf
351+
# Copy the pattern from
352+
# https://github.com/django/django/blob/master/django/test/signals.py#L152
353+
clear_url_caches()
354+
set_urlconf(None)
351355

352356
request.addfinalizer(restore)
353357

tests/test_urls.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
from pytest_django_test.compat import force_text
55

6-
pytestmark = pytest.mark.urls('pytest_django_test.urls_overridden')
76

87
try:
98
from django.core.urlresolvers import is_valid_path
@@ -24,11 +23,43 @@ def is_valid_path(path, urlconf=None):
2423
return False
2524

2625

26+
@pytest.mark.urls('pytest_django_test.urls_overridden')
2727
def test_urls():
2828
assert settings.ROOT_URLCONF == 'pytest_django_test.urls_overridden'
2929
assert is_valid_path('/overridden_url/')
3030

3131

32+
@pytest.mark.urls('pytest_django_test.urls_overridden')
3233
def test_urls_client(client):
3334
response = client.get('/overridden_url/')
3435
assert force_text(response.content) == 'Overridden urlconf works!'
36+
37+
38+
def test_urls_cache_is_cleared(testdir):
39+
testdir.makepyfile(myurls="""
40+
from django.conf.urls import patterns, url
41+
42+
def fake_view(request):
43+
pass
44+
45+
urlpatterns = patterns('', url(r'first/$', fake_view, name='first'))
46+
""")
47+
48+
49+
testdir.makepyfile("""
50+
from django.core.urlresolvers import reverse, NoReverseMatch
51+
import pytest
52+
53+
@pytest.mark.urls('myurls')
54+
def test_something():
55+
reverse('first')
56+
57+
58+
def test_something_else():
59+
with pytest.raises(NoReverseMatch):
60+
reverse('first')
61+
62+
""")
63+
64+
result = testdir.runpytest()
65+
assert result.ret == 0

0 commit comments

Comments
 (0)