断言错误:302!= 200

时间:2015-10-22 06:45:19

标签: python django testing

我尝试在tests.py中创建一个测试

class TaskViewTests(TestCase):
    def test_task_view_with_no_task(self):
        """
        If no task exist, an appropriate message should be displayed.
        """
        userName = 'esutek'
        response = self.client.get(reverse('actuser:task',args=(userName,)))
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "No task are available.")
        self.assertQuerysetEqual(response.context['taskList'], [])

然而它给了我这个错误信息。 我不知道为什么会发生这种情况。我只是按照教程。

actuser:任务 views.py

def task(request, userName):
    """ User task list in actInbox
    """

    user = ActuserViewModel()
    user.get_task_list(userName)

    return render(request, 'actuser/task.html', {
                'userName': userName,
                'taskList': user.taskList,
                'dateToday': user.dateToday,
           })

viewmodels.py

def get_task_list(self, userName):
    self.taskList = Task.objects.filter(executor = userName, parent_task_id=EMPTY_UUID).order_by('due_date')
    #get date now with this format 05/11
    self.dateToday = datetime.date.today()

其实我有2个网址......

这是来自项目

url(r'^(?P<userName>[0-9a-zA-Z--]+)/', include('actuser.urls', namespace="actuser")),

这个是来自actuser.urls

url(r'^task/$', views.task, name='task'),

2 个答案:

答案 0 :(得分:3)

HTTP 302表示您被重定向到其他某个网址。例如,如果您使用RedirectView,或者如果您忘记在请求URL的末尾写斜杠并且启用了APPEND_SLASH(在这种情况下,您获得HTTP),则可以故意进行重定向301而不是302)。

你最后需要一个斜杠:

url(r'^(?P<userName>[0-9a-zA-Z-]+)/task/$', ...

答案 1 :(得分:1)

如果您的视图需要登录,您可能会获得重定向。

您需要先登录,这是一个很好的示例: Django: test failing on a view with @login_required

简而言之:

class LoginTestCase(TestCase):
    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')

    def testLogin(self):
        self.client.login(username='john', password='johnpassword')
        response = self.client.get(reverse('testlogin-view'))
        self.assertEqual(response.status_code, 200)