我正在写我的Django的一些测试app.In我看来,它重定向到使用一些其他的URL“HttpResponseRedirect'.So我怎么测试?
Answer 1:
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')
我也建议使用反向查找您从名称想到的URL,如果它在你的应用程序的URL反正。
Answer 2:
Django的TestCase
类有一个方法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次检查,它是一个永久重定向。
Answer 3:
在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/')
相反,下面是更强大,更简洁,没有http://testserver/
需要
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)
文章来源: Django: How to test for 'HttpResponsePermanentRedirect'