我正在为我的 django 应用程序编写一些测试。在我看来,它使用“HttpResponseRedirect”重定向到其他一些 url。那么我该如何测试呢?
问问题
8859 次
3 回答
21
DjangoTestCase
类有一个assertRedirects
可以使用的方法。
from django.test import TestCase
class MyTestCase(TestCase):
def test_my_redirect(self):
"""Tests that /my-url/ permanently redirects to /next-url/"""
response = self.client.get('/my-url/')
self.assertRedirects(response, '/next-url/', status_code=301)
状态码 301 检查它是否是永久重定向。
于 2012-07-27T09:07:05.603 回答
15
from django.http import HttpResponsePermanentRedirect
from django.test.client import Client
class MyTestClass(unittest.TestCase):
def test_my_method(self):
client = Client()
response = client.post('/some_url/')
self.assertEqual(response.status_code, 301)
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
self.assertEqual(response.META['HTTP_LOCATION'], '/url_we_expect_to_be_redirected_to/')
响应的其他属性可能值得测试。如果您不确定对象上有什么,那么您可以随时执行
print dir(response)
编辑当前版本的 DJANGO
现在更简单了,只需执行以下操作:
self.assertEqual(response.get('location'), '/url/we/expect')
我还建议使用 reverse 来查找您期望从名称中获得的 url,如果它是您应用程序中的 url。
于 2012-07-27T07:38:04.173 回答
1
在 django 1.6 中,您可以使用(不推荐):
from django.test import TestCase
from django.http import HttpResponsePermanentRedirect
class YourTest(TestCase):
def test_my_redirect(self):
response = self.client.get('/url-you-want-to-test/')
self.assertEqual(response.status_code, 301)# premant 301, temporary 302
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
self.assertEqual(response.get('location'), 'http://testserver/redirect-url/')
instead, following is more powerful and concise and no http://testserver/
need
from django.test import TestCase
class YourTest(TestCase):
def test1(self):
response = self.client.get('/url-you-want-to-test/')
self.assertRedirects(
response, '/redirect-url/',status_code=301,target_status_code=200)
于 2014-05-31T03:19:44.707 回答