我在Django 1.8工作。我想测试一下我的页面中有四个<li>
个元素。
这是我现有的test_views.py
:
def test_call_view_bnf_all(self):
response = self.client.get('/bnf/')
self.assertEqual(response.status_code, 200)
context_sections = response.context['sections']
self.assertEqual(len(context_sections), 4)
self.assertTemplateUsed(response, 'all_bnf.html')
self.assertContains(response, '<h1>All BNF sections</h1>')
如何测试页面中有四个<li>
元素,而不是提供所有原始HTML并执行assertContains
?
答案 0 :(得分:1)
assertContains()
内置了count
选项:
assertContains(response, text, count=None, status_code=200, msg_prefix='', html=False)
如果提供计数,文字必须在响应中完全计数次。
因此,您可以使用:
self.assertContains(response, '</li>', 4)
答案 1 :(得分:0)
我会使用BeautifulSoup来实现这一目标。有点像:
def test_call_view_bnf_all(self):
response = self.client.get('/bnf/')
response_soup = BeautifulSoup(response.content)
li_elements = response_soup.find_all('li')
self.assertEqual(len(li_elements), 4)
答案 2 :(得分:0)
我一直在使用PyQuery来做这种事情。基本上,您最终会编写一个jquery选择器,然后测试结果。与jquery兼容的好处是你可以先在浏览器中测试你的选择器。
到目前为止对PyQuery非常满意,除了它有一个lxml依赖项,我发现使用Chef安装很有挑战性。
data = PyQuery(response.content)
result = data("li")
#haven't used PyQuery to check the length of a result yet
#might be
self.assertEqual(4,len(result))