如何测试CBV ListView生成的上下文中是否有'object_list'?

0 投票
1 回答
1538 浏览
提问于 2025-04-17 22:31

我正在尝试写一个测试,看看通过一个基于类的视图 ListView 传递的上下文中是否有一个 object_list

目前我有以下代码:

views.py

    class BlogView(ListView):
        model = Post
        template_name = 'core/blog.html'

model.py:

    class Post(models.Model):
        title = models.CharField(max_length=500)
        content = models.TextField()

tests.py

    class BlogListViewTests(TestCase):

        def setUp(self):
            self.resp = self.client.get('/blog/')

        def test_has_a_post_list(self):
            self.assertContains(u'post_list', self.resp.context)

当我运行这个测试时,出现了以下错误:

    Traceback (most recent call last):
      File "/home/breno/projects/blog/core/tests.py", line 36, in test_has_a_post_list
          self.assertContains(self.resp.context, 'post_list')
      File "/home/breno/.virtualenvs/blog/local/lib/python2.7/site-packages/django/test/testcases.py", line 325, in assertContains
          self.assertEqual(response.status_code, status_code,
     AttributeError: 'ContextList' object has no attribute 'status_code'

打印 self.resp.context 时,我看到里面有一个元组,里面有一个键 u'post_list'

[[{'False': False, 'None': None, 'True': True}, {u'paginator': None, u'post_list': [], u'object_list': [],...,]]

我的测试出了什么问题?我该如何进行这个测试?谢谢!

1 个回答

3

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。为了帮助大家更好地理解这些问题,很多人会在网上提问,比如在StackOverflow上。

在这些讨论中,大家会分享他们的经验和解决方案。有些人可能会提供代码示例,帮助其他人更好地理解如何解决类似的问题。这些代码示例通常会用一些占位符,比如

class BlogListViewTests(TestCase):

    def setUp(self):
        self.resp = self.client.get('/blog/')

    def test_has_a_post_list(self):
        self.assertTrue('post_list' in self.resp.context)
,来表示具体的代码内容。

总之,编程的学习过程就是不断提问和寻找答案的过程。通过阅读别人的问题和答案,我们可以学到很多有用的知识和技巧。

撰写回答