如何使用POST参数测试URL?

时间:2014-10-23 16:39:05

标签: python django

请帮助编写测试。

解决:

/edit_records/38/

使用视图edit_records()。

以下是对它的测试:

def test_edit_records(self):    
    resolver = resolve('/edit_records/38/')    
    self.assertEqual(resolver.func, edit_records)

还有一个地址:

/edit_records/38/
POST={
    q:1,
    w:2
}

视图应该使用my_records()

这是一个非工作测试:

def test_edit_records_POST(self):                  
    resolver = resolve('/edit_records/38/', {q:1, w:2})        
    self.assertEqual(resolver.func, my_records)

这是一个观点,如果你想:

def edit_records(request, id_record):   
    entry = Diary.get_entry(id_record=id_record, user_id=request.user.pk)
    form = addMessageForm(instance=entry)

    if request.method == 'POST':
        form = addMessageForm(request.POST, request.FILES, instance=entry)
        if form.is_valid():     
            form.save()     
            return HttpResponseRedirect('/my_records/')

    t = loader.get_template('page_edit_records.html')
    c = RequestContext(request, {
        'form': form,
    })  

    return HttpResponse(t.render(c))    

1 个答案:

答案 0 :(得分:1)

我不太确定你为什么要用resolver做所有这些事情。这与单元测试并不完全相关;你不能自己调用​​视图,因此你没有测试它的任何实际功能,你在这里测试的唯一一件事就是Django的URL解析器。

相反,您应该使用测试客户端提供的功能来实际调用您的视图:

def test_edit_records(self):    
    response = self.client.get('/edit_records/38/')
    self.assertContains(response, 'some data you expect to see in the response')

你可以用POST做同样的事情:

def test_edit_records_POST(self):    
    response = self.client.POST('/edit_records/38/', {q:1, w:2})
    self.assertTrue(something_about_the_response)