我的 Django 应用程序中有一个路由规则,用于重定向到外部 CDN 的下载。我现在正在为我的应用程序编写测试,并且我想测试该路由是否成功重定向到我的 Django 设置中配置的 url。这是一个简化的示例,应该有助于解释我正在尝试做的事情:
from django.test import SimpleTestCase
from django.test.client import Client
from django.conf import settings
class MyTestCase(SimpleTestCase):
def setUp(self):
self.client = Client()
def test_download(self):
response = self.client.get('/download/mac/')
self.assertRedirects(response, settings.URLS.get('mac'))
现在这不起作用,即使我在此方法中打印 settings.DOWNLOAD_URL 它是正确的,重定向也会得到 404,并且复制/粘贴到浏览器中证明它有效。我开始研究为什么它不起作用,我在 Django 源代码中注意到了这一点:
请注意,assertRedirects 不适用于外部链接,因为它使用 TestClient 进行请求。
那么,如何测试这些重定向?我不是在寻找任何超级花哨的东西,我希望检查的是响应的 status_code 和位置。我看到响应有一个跟随参数,并尝试了这样的东西,但它仍然没有工作:
def test_download(self):
response = self.client.get('/download/mac/', follow=True)
self.assertEqual(response.status_code, 302)
self.assertEqual(response['Location'], settings.URLS.get('mac')
有人要求我包含我的 urls.py 和 views.py 中的相关部分,它们是:
# urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns('myapp.views',
url(r'^download/(?P<platform>\w+)/$', 'download_app', name='download'),
)
#views.py
from django.conf import settings
from django.shortcuts import redirect
from django.http import Http404
def download_app(request, platform):
if platform in settings.URLS:
return redirect( settings.URLS.get(platform) )
else:
raise Http404
任何解决此问题的帮助将不胜感激。提前致谢。