2013-08-06 71 views
0

我正在调整官方Django 1.5教程中的单元测试。我试图在ListView上测试一个空的上下文。我收到以下错误:Django:单元测试ListView和assertContains问题

AssertionError: Couldn't find 'No persons are available' in response. 

,这是我的ListView代码:

class RsvpListView(generic.ListView): 
    template_name = 'rsvp_list.html' 
    context_object_name = 'rsvplist' 

    def get_queryset(self): 
     return Person.objects.all() 

这里是我的测试用例的方法:

def test_rvsp_list_view_with_no_persons(self): 

     response = self.client.get(reverse('myapp:rsvp_view')) 
     self.assertEqual(response.status_code,200) 

     self.assertContains(response,"No persons are available.") 
     self.assertQuerysetEqual(response.context['rsvplist'],[]) 

但在官方教程中的民意调查等效line(https://docs.djangoproject.com/en/dev/intro/tutorial05/#testing-our-new-view):

self.assertContains(response,"No polls are available.") 

我不知道哪里“没有民意调查”存储在本教程提供的视图方法的响应中,但由于某种原因它通过了 - 我的方法并没有。

我在测试方法中丢失了什么,所以它也通过了?

回答

1

“无投票可用”消息来自模板。从part 3 of the tutorial

{% if latest_poll_list %} 
    <ul> 
    {% for poll in latest_poll_list %} 
     <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li> 
    {% endfor %} 
    </ul> 
{% else %} 
    <p>No polls are available.</p> 
{% endif %} 

你需要更新你的模板rsvp_list.html包括“没有人是可用的。”以类似的方式。

+0

感谢您的快速答复。我很感激 :) – Paul

0

以前的答案的作品,但更有效的方式(你会不会使用冗余的模板结构来)做的“为空”建设这样的:

<ul> 
{% for poll in latest_poll_list %} 
    <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li> 
{% empty %} 
    <li>No polls are available.</li> 
{% endfor %} 
</ul>