写作测试困难,得到错误的答案?

时间:2019-02-05 10:14:35

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

我的问题:我正在编写测试,得到的响应是302,而不是200。我认为这是一种预期,因为当用户未登录并且未分配给Employee_Management组时,他们将总是被重定向。

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

视图:

@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)

1 个答案:

答案 0 :(得分:2)

您的问题是您使用了两个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)