我正在为我的django应用程序编写一些测试。在我看来,它使用'HttpResponseRedirect'重定向到其他一些URL。所以我该如何测试?Django:如何测试'HttpResponsePermanentRedirect'
回答
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。
Django TestCase
类有一个方法,您可以使用。
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检查它是永久重定向。
这是否适用于任何使用Django'<= 1.5.2'的人?看来我已经击中了[这个bug](https://bitbucket.org/kmike/django-webtest/issue/8/assertredirects-response-code-was-302)。 – 2013-09-04 20:45:20
@ JonasG.Drange您将链接到应用程序django-webtest版本1.5.2的错误报告,而不是Django本身。在我最初的回答中,我确实建议你可以在get请求中使用'follow = False'来阻止客户端遵循重定向。这是不正确的,所以我删除了它。按照记录,“assertRedirect”方法总是检查状态页面。有一张票[#20919](https://code.djangoproject.com/ticket/20919)允许'assertRedirects'不加载目标页面。 – Alasdair 2013-09-05 00:05:23
这样做更有意义。谢谢。 – 2013-09-05 05:58:21
在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)
- 1. 在Django中如何测试
- 2. 如何调试Django单元测试?
- 3. 测试Graphene-Django
- 4. Django的测试
- 5. 如何测试Django中的Bootstrap tour popover?
- 6. 如何使用request.post执行django测试?
- 7. 你如何在Django中测试formset?
- 8. 如何测试使用django模板块?
- 9. 如何使用client.post()测试django注销?
- 10. 如何测试Django表单ImageField
- 11. 如何测试Django formset提交
- 12. 如何在django中测试网址
- 13. 如何获得的Django单元测试
- 14. 如何禁用Django的测试发现?
- 15. 如何测试django数据库模式?
- 16. 如何测试Django FileField是否为空?
- 17. 如何修改Django的测试框架
- 18. 如何在Django中测试send_mail?
- 19. 如何运行django测试用例?
- 20. 如何正确测试django UpdateView?
- 21. 如何在Django中测试连接MySQL?
- 22. 如何覆盖运行django-admin.py测试?
- 23. 我如何测试django与gitlab ci
- 24. 约Django的HttpResponsePermanentRedirect到Android市场的URL不起作用
- 25. 用django测试客户端测试UserPassesTestMixin
- 26. Django测试环境
- 27. django视图测试
- 28. Django测试失败
- 29. 测试django方法
- 30. Django的测试表
你能否详细说明吗?你到底想要测试什么? – Babu 2012-07-27 07:34:10