【问题标题】:Difficulty writing tests, getting wrong responses?难以编写测试,得到错误的响应?
【发布时间】:2019-02-05 10:14:35
【问题描述】:

我的问题:我正在编写测试并且收到 302 个响应而不是 200 个响应。我认为这是意料之中的,因为当用户未登录且未分配到 Employee_Management 组时,他们会总是被重定向。

所以我试图创建一个用户并将其添加到组中,但我不知道如何检查用户是否实际登录,或者它是否是组的一部分。我没有从设置中得到任何错误,但测试仍然失败并给我一个 302。所以我的猜测是我搞砸了我的设置。想法?

查看:

@method_decorator(group_required('Employee_Management'), name='dispatch')
class ListActiveView(TemplateView):

def get(self, request):
    users = User.objects.all().exclude(is_superuser=True)
    return render(request, 'user/list_active.html', {
        'users': users,
    })

网址:

app_name = 'user'
urlpatterns = [path('list_active/', ListActiveView.as_view(), name='list_active')]

测试:

class TestListActive(TestCase):

    def setUp(self):
        user = User.objects.create(username='testuser', password='testuserpass')
        emp_man = Group.objects.create(name='Employee_Management')
        user.groups.add(emp_man)
        c = Client()
        c.login(username='testuser', password='testuserpass')

    def test_list_active_url(self):
        response = self.client.get(reverse('user:list_active'))
        self.assertEquals(response.status_code, 200)

【问题讨论】:

    标签: django django-models django-views django-testing django-tests


    【解决方案1】:

    您的问题是您使用了两个 Client 实例。

    第一个 (c) 是您在 setUp 中创建的,您的用户已登录到该地址,但不再使用。

    另一个是 TestCase 实例的客户端 (self.client),您在 test_list_active_url 中使用它并且您的用户没有登录。

    要解决这个问题,请始终使用TestCase 实例的客户端:

    class TestListActive(TestCase):
    
        def setUp(self):
            user = User.objects.create(username='testuser', password='testuserpass')
            emp_man = Group.objects.create(name='Employee_Management')
            user.groups.add(emp_man)
            self.client.login(username='testuser', password='testuserpass')
    
        def test_list_active_url(self):
            response = self.client.get(reverse('user:list_active'))
            self.assertEquals(response.status_code, 200)
    

    【讨论】:

    • 这不会改变我的结果。我仍然得到 302 响应,而我应该得到 200。我的测试是否可以显示哪个用户已登录以及它属于哪个组?
    • 你可以试试django.contrib.auth.get_user(self.client)
    • 感觉自己有点不知所措,将用户名更改为不存在的名称,测试似乎不在乎并通过了它。如果测试忽略它,那么创建测试用户有什么意义。看不到登录的用户,看不到它的组。
    • 我曾经检查登录的结果以确保成功self.assertTrue(self.client.login(username='testuser', password='testuserpass'))。您还可以检查您被重定向到的网址
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多