3

我正在改编官方 Django 1.5 教程中的单元测试。我正在尝试在 ListView 上测试一个空上下文。我收到以下错误:

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

这是我的 TestCase 方法:

   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'],[])

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

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

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

我的测试方法中缺少什么所以它也通过了?

4

2 回答 2

2

“没有可用的民意调查”消息来自模板。从教程的第 3 部分开始

{% 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 以包含“没有人可用”。以类似的方式。

于 2013-08-06T01:23:00.293 回答
1

以前的答案有效,但更有效的方法(您不会使用冗余模板结构)使用“for-empty”结构来做到这一点,如下所示:

<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>
于 2018-01-08T19:23:14.747 回答