2015-05-22 2 views
0

Я работаю в Django 1.8. Я бы хотел проверить, что на моей странице есть четыре элемента <li>.Тесты Django: проверьте, что на странице появилось определенное количество элементов?

Это мой существующий 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

Для достижения этой цели я бы использовал 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) 
1

assertContains() имеет count вариант построен в:

assertContains(response, text, count=None, status_code=200, msg_prefix='', html=False) 

If графа обеспечивается, текст должно происходить в точности COUNT раз в ответ ,

Таким образом, вы можете использовать:

self.assertContains(response, '</li>', 4) 
+0

приятно знать, что –

+0

@JLPeyret, yep! Никаких внешних зависимостей не требуется. Однако использование чего-то другого, такого как lxml, BeautifulSoup, или рекомендации PyQuery было бы лучшим вариантом, если нужно много разбора html. Кстати, спасибо за обмен этой библиотекой. Я никогда не слышал об этом! – rnevius

0

Я использую PyQuery делать такого рода вещи. В принципе, вы закончите писать селектор jquery, а затем проверите результат. Хорошая вещь, совместимая с jquery, заключается в том, что вы можете сначала проверить свой селектор в своем браузере.

Довольно доволен PyQuery до сих пор, за исключением того, что у меня есть зависимость lxml, которую я нашел, сложно установить с шеф-поваром.

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