django-testing - HttpResponseRedirect' 对象没有属性 'client'

标签 django-testing django-tests

Django 1.9.6

我想编写一些单元测试来检查重定向。

你能帮我理解我在这里做错了什么吗?

先感谢您。

考试:

from django.test import TestCase
from django.core.urlresolvers import reverse
from django.http.request import HttpRequest
from django.contrib.auth.models import User

class GeneralTest(TestCase):

    def test_anonymous_user_redirected_to_login_page(self):
        user = User(username='anonymous', email='vvv@mail.ru', password='ttrrttrr')
        user.is_active = False        
        request = HttpRequest()
        request.user = user
        hpv = HomePageView()
        response = hpv.get(request)
        self.assertRedirects(response, reverse("auth_login"))

结果:

错误:test_anonymous_user_redirected_to_login_page (general.tests.GeneralTest)

回溯(最近一次调用最后一次):
文件“/home/michael/workspace/photoarchive/photoarchive/general/tests.py”,第 44 行,在 test_anonymous_user_redirected_to_login_page
self.assertRedirects(响应,反向(“auth_login”))
文件“/home/michael/workspace/venvs/photoarchive/lib/python3.5/site-packages/django/test/testcases.py”,第326行,在assertRedirects
redirect_response = response.client.get(path, QueryDict(query),
AttributeError: 'HttpResponseRedirect' 对象没有属性 'client'

在 0.953 秒内运行 3 个测试

pdb 说什么:
-> self.assertRedirects(response, reverse("auth_login"))
(Pdb) response
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/accounts/login/">

最佳答案

您需要向响应对象添加一个客户端。请参阅下面的更新代码。

from django.test import TestCase, Client
from django.core.urlresolvers import reverse
from django.http.request import HttpRequest
from django.contrib.auth.models import User

class GeneralTest(TestCase):

    def test_anonymous_user_redirected_to_login_page(self):
        user = User(username='anonymous', email='vvv@mail.ru', password='ttrrttrr')
        user.is_active = False        
        request = HttpRequest()
        request.user = user
        hpv = HomePageView()
        response = hpv.get(request)
        response.client = Client()
        self.assertRedirects(response, reverse("auth_login"))

关于django-testing - HttpResponseRedirect' 对象没有属性 'client',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553590/

相关文章:

django - 如何测试登录过程?

django测试客户端总是返回301

django - 摆脱 django testsuite 中的空 models.py

python - Django 测试用例不返回任何内容的模型方法

python - 使用 TestCase 数据库的 DJANGO 开发服务器

python - 为什么 Django 测试无法识别我的 App 测试?

python - Django 在 View 中测试 ajax 端点

python - 带有回滚仿真的 Django TransactionTestCase

django - 我们怎样才能使 Django 测试更快?

python - 在 Django 中通过 URL 传递静态字符串参数(模型选择)?