Django的:如何测试“HttpResponsePermanentRedirect”(Django

2019-09-20 07:42发布

我正在写我的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'